- A hozzászóláshoz be kell jelentkezni
- 1413 megtekintés
Hozzászólások
... az amelyik akkor is mukodik ha elkuldenem masnak a kodot... :) meghat vegulis whitespace-ban is lehet programozni de minek.
- A hozzászóláshoz be kell jelentkezni
AS - ahogy sikerul... random, 1-2-4 space... neha 1-1 tab is bar az mar csak py2-nel mukodott vegyesen
- A hozzászóláshoz be kell jelentkezni
Meg mindig nem tudtam napirendre terni afelett, hogy a programozok nincsenek kiakadva egy olyan program nyelven, ahol a whitespace a syntax resze ... (leszamitva persze a mar emlitett 'whitespace' programnyelvet ;) )
- A hozzászóláshoz be kell jelentkezni
Vannak a szintaxisaban ennel zavarobb dolgok is. Peldaul az, hogy ki kell tenni a kettospontot (lehetne inkabb zarojelezni), vagy hogy OO-ban ki kell irnod mindenutt a self-et. A tab-okat is tiltanam belole. A space-es behuzas eleinte fura volt, most mar kifejezetten tetszik benne. A C-s && es || meg a ++ es --is kicsivel jobb lenne, de mar megszoktam, hogy nincs. A nyelv (ill. az implementaciok) legnagyobb hatranyanak meg mindig a GIL-t latom, de idorol idore felroppen a hir, hogy dolgoznak rajta, talan megoldjak.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Mindegyik csak megszokás kérdése. A tabok tiltása annyiban már megkezdődött, hogy nem keverhető a tab és space indentálás. A self kiírása nyilván az egyöntetű namespace miatt kell, de annyira azért az sem vészes.
Viszont elárulhatnád, hogy mi az a GIL :)
- A hozzászóláshoz be kell jelentkezni
Global Interpreter Lock. Ami ha van akkor unhatékony az egész, ha meg kiszednék akkor az eddig/legacy kódok osszeomlanak a francba. Szóval vsz ki fogják szedni - csak a szokásos: a térbeli és időbeli hordozhatóság csak ennél a nyelvcsaládnál nem számít.
- A hozzászóláshoz be kell jelentkezni
szedjek ki es nevezzek el python4-nek. aztan majd ahogy 2->3 idejen mindneki javitja/portolja a kodjat.
bar ez elvileg csak a multithread kodokat erinti, ami py-nel amugy sem jellemzo... foleg miota van nativ async io.
- A hozzászóláshoz be kell jelentkezni
Ha jól értem a leírtakat, ez nem a nyelv korlátja, hanem az implementációé, tehát elvben nincs akadálya a megszüntetésének.
- A hozzászóláshoz be kell jelentkezni
Egyébként ezt sosem értettem. A tabra be van állítva, hogy 4 space legyen. Egyszer kell beállítani IDEnként.
- A hozzászóláshoz be kell jelentkezni
Így van. És mindenki oda állítja ahol neki jól esik.
Nekem 2 space, és akkor több fér egy sorba.
- A hozzászóláshoz be kell jelentkezni
Aki kilométeres sorokat ír programként, annak inkább szélesebb monitor kell! ;-)
- A hozzászóláshoz be kell jelentkezni
Mondjuk a Self szerintem is gány. Az identálásos szintaxis szerintem jó dolog, pláne hogy nem egy programnyelvrõl hanem egy scriptnyelvről beszélünk. Ebben elvileg nem kellene pár tíz sornál hosszabb kódot írni.
- A hozzászóláshoz be kell jelentkezni
:D
- A hozzászóláshoz be kell jelentkezni
Pedig nem olyan furcsa ez. Ha a kedvenc nyelveden ugy kell olvasnod egy kodot hogy nincenek benne bekezdo white space-ek az rendben van? Mert ha nehezebb igy olvasni, akokr ez a konvencio tulajdonkeppen azelott is a syntax resze volt. DE amiert en igazan szeretem, az az, hogy a kodblokkot zaro zarojeleket igy el lehet hagyni (ahogy nyito zarojel sincs). Ugyanezert szeretem jobban a yaml-t a json-nal, jobban olvashato.
- A hozzászóláshoz be kell jelentkezni
Tobb ok miatt is.
1. Kb. nem is tudok olyan projektet, ahol nem jott valami okostojas, es nekiallt ezen a 'color of the bikeshed' teman csamcsogni. Uuuuuncsi! -> kvazi szabvanyositottak legtobb helyen, pl. java ecosystem, de rust is a cargo fmt -vel.
2. Alapvetoen a whitespace disz, es a blokkokat kulon kell jelolni. ez gaz. nekem nagyon tetszik a python-ban, hogy vegre a, megoldottak a whitespace-mizeriat, b, ertelmet is adtak neki.
- A hozzászóláshoz be kell jelentkezni
Legalább ki van kényszerítve a normális identálás. Engem ennél sokkal jobban zavar a Go nevű agyhalál. Általában is gyűlölöm a szőkenős identálást ami a legtöbb C/C++/Javascript kódban van, de ezt az agyhalált a Go-ban sikerült a szintaxis szintjére is beemelni.
- A hozzászóláshoz be kell jelentkezni
> szőkenős identálást
az meg milyen?
- A hozzászóláshoz be kell jelentkezni
A K&R indentation style amit a legtöbb C/C++/Javascript kódban látsz. Valami ilyesmi
if (a==12) {
fn();
}
Nyitó kapcsos az if/while utasítással egy sorban, záró a blokk mögött külön sorban. Nem igazán átlátható (a kapcsosok nincsenek egymás felett) és semmiféle logika dincs mögötte, mert ha Pl. a helyspórolás a cél, akkor miért van az utolsó kapcsos külön sorban? Valaki egyszer kitalálta hogy így legyen, mert hogy csak. Na most, a mai rendszerekben ez kevésbé probléma, mert van automatikus formázás, de a Go esetén ez be van betonozva a szintaxisba.
- A hozzászóláshoz be kell jelentkezni
Rust "cargo fmt" után szintén zenész, ezt a hagyományt követi:
if a == 12 {
fn1();
}
Itt csak annyi a különbség, hogy nem szokás zárójelezni az if utáni részt, kivéve természetesen a belsejét, ha precedencia indokolja.
Továbbá érdekesség, hogy if/else ágban vissza is térhetsz értékkel. Szintén autoformázás utáni állapot:
let b = if a == 12 { fn1() } else { -1 };
Ha meg hosszabb, akkor több sorra töri az autoformázás:
let b = if a == 12 {
function_teszt()
} else {
function_masikteszt()
};
- A hozzászóláshoz be kell jelentkezni
Nem csalódtam a Rust-ban, Go-ban, nem véletlen, hogy nem szeretem egyiket se. Ez a jelenség engem is mindig zavart tudat alatt, de nem fogalmaztam meg tudatosan, és nem tudtam, hogy szökkenő indentálás a neve. Ez a let = komplett if struktúra is elég átláthatatlan agyrémnek tűnik.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Vannak hideg-meleg dolgok. Nekem is vegyes néhány dologról a megítélésem.
Egy biztos, azt akarták elérni, amit a C az alábbival:
int b = a == 12 ? fn1() : -1;
Azonban erre külön ? és : kifejezést nem akarták bevezetni, a tömör íráshoz maradt az if ... { ... } else { ... }.
let b = if a == 12 { fn1() } else { -1 };
De van még furcsaság, ahol visszatérhet értékkel:
let result = match a {
1 => 10,
2 => 30,
3..=5 => 50,
_ => -1,
};
let result = loop {
...
if akármi > 10 {
break akármi * 2; // break és visszatérési érték!
}
};
- A hozzászóláshoz be kell jelentkezni
mert ez a legolvashatobb sok fuggoleges hely elpocsekolasa nelkul.
btw java standard is, a teljes java ecosystem ezt hasznalja.
A zaro } azert van kulon sorban, mert egy kod blokkot zar le, emiatt egy indent-el kijjebb kerul. Amit irsz, azt egyebkent igy szokas:
if (a==12) fn();
mert ilyen rovidet nem teszunk kulon blokkba. Aztan nehol style guide-ban kieroszakoljak, de en a nyulfarknyi blokkokert harapok. :)
- A hozzászóláshoz be kell jelentkezni
Az olvasható megoldás az az lenne, ha a nyitó kapcsos is külön sorba kerül - ez amúgy messzirõl nézve kb. úgy néz ki mint egy python program :-)
A helytakarékos pedig az, ha a záró kapcsos is az utolsó utasítás mögé kerül. Ez az öszvér megoldás sem nem takarékos, sem nem átlátható. Csak megszokta a nép, mint a windowst vagy az officet.
- A hozzászóláshoz be kell jelentkezni
Rossz hírem van: a világ nagy része veled szemben halad az autópályán :)
- A hozzászóláshoz be kell jelentkezni
a záró kapcsos is az utolsó utasítás mögé kerül
na, ha valamelyik permutációt nem szeretném, látni, akkor ez az :)
- A hozzászóláshoz be kell jelentkezni
Most elképzeltem, hogy mondjuk 3-4 egymásba ágyazott blokkból néhányat bezárunk épp, és az utolsó utasítás mögé odabiggyesztünk mondjuk 2-3 }-t, aztán valaki találja ki, hogy melyik oszlopban kell folytatni, illetve ha valaki mondjuk a 2. és a 3. záró között kellene folytassa még pár utasítással, annak nagyon kell majd figyelnie, ne rontsa el. Ha egyáltalán észreveszi, hogy most ott nem egy, hanem több blokknak is vége volt.
Inkább bármi mást.
disclaimer: ha valamit beidéztem és alá írtam valamit, akkor a válaszom a beidézett szövegre vonatkozik és nem mindenféle más, random dolgokra.
- A hozzászóláshoz be kell jelentkezni
Értem a problémát, de ugyanazt tudom csak mondani, amit fentebb a whitespace-ekről. Egy megfelelő editor/IDE választásával ez a probléma lényegében megszűnik.
- A hozzászóláshoz be kell jelentkezni
> semmiféle logika dincs mögötte...
De van, mégpedig az, hogy ha sort kell beszúrni, az biztosan a megfelelő helyre kerül. Nem véletlen, hogy ha már egynél több ember dolgozik egy programon, ez a stílus lesz a kézenfekvő választás.
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ezen sirtam. :D
- A hozzászóláshoz be kell jelentkezni
Megelőztél :D
- A hozzászóláshoz be kell jelentkezni
Elegánsabb a tab, de lustaságból sokszor 4 space-t meg ennek többszöröseit használom. Pythonban mindig is utáltam, hogy a behúzás jelenti a struktúrát, és nem a blokkjelölők. 1-2 space nekem semmiképp nem elég, nem látszik tőle rendesen a struktúra a sokadik szintnél, 2 space fölött ízlés kérdése, hogy mennyi space, vagy tab van-e helyette.
Azért írom, hogy elegánsabb a tab, mert mégis csak ez a legrugalmasabb, mindenki az IDE-jében (nálam neovim) be tudja állítani, hogy ez mekkora behúzást takarjon és hogy le legyen-e cserélve space-ekre, ha annak a megoldásnak híve. Plusz a \t avagy 0x09 ASCII karakter pont erre lett kitalálva, akkor használjuk, amire való, azért van, és még a forráskód mérete is csökken. Mint írtam, néha sajnos előkerül, hogy nem jól beállított editorban, környezetben kell kódot szerkesztenem, ott lustaságból és reflexből nyomatom a 4 space-t meg annak többszöröseit, a többit már a szerkesztő ennek megfelelően húzza be. Gyányolás, de a lustaság nagy úr.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
A kinézettől van fontosabb is. Van az úgy, hogy keresek egy hosszú stringet egy nagy kódbázisban. Pl. egy elérési út, mert tudni akarom, hogy hol írunk/olvasunk egy adott fájlt. Vagy egy hibaüzenet, ami a logban figyel stack trace nélkül, és tudni kéne, honnan jött. Na ilyenkor lehet agybajt kapni, ha a stringet a megfelelő sorhossz és indentálás miatt széttördelték. Büntetendő kategória.
- A hozzászóláshoz be kell jelentkezni
Ez ellen tudsz védekezni, az IDE/editor/terminál ablakát, betűtípusát úgy állítod be, hogy jó sok karakter férjen ki egy sorba. Ez nem jelent problémát, hiszen a mai átlag 1080p-s, meg afeletti kijelzőkre jó sok minden kifér, én pl. gyatra kijlezőkön felvett szokásból lóméretű (és hinteléssel agyonvastagított) fontokat használok a terminálban, de még nálam is kifér ~150 karakter egy sorba, abba azért elég sokszorosan hosszan beindentált hosszú string is belefér. Vagyis eleférne, ha a szavazásban hivatkozott Python style guide nem ajánlana max. 79 karaktert soronként, ami ma már szerintem elavult, a konzervatív kódolási stílusú Linux kernelnél is lazítottak ezen már azóta. Ma már nem 80 karakterszélességű fizikai terminálokon meg home mikrókon kódolnak az emberek. Ennek ellenére nekem a kódjaimban ritkán megyek 80 karakter fölé, jellemően az alatt maradok, és nem esztétikai korlátból, hanem a hosszú sor a kód érthetőségét rontja egy szinten túl (a „felesleges” sortörés önmagában nem zavarna). Ugyanez igaz a túl sokszorosan behúzott struktúrákra.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Ha csak Python lenne, akkor majdnem mindegy, de mivel az IDE több nyelvet is kell támogasson, így egységesebb a szóköz (ha próbáltál már tabolt scriptet bash-be másolni, akkor pontosan tudod miről beszélek :D )
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..
- A hozzászóláshoz be kell jelentkezni
Igazából ez volt az egyik fő oka, hogy Julia-ra váltottam :)
- A hozzászóláshoz be kell jelentkezni
Julia mennyire alkalmas például a jelenlegi Pythonban írt rendszertoolok kiváltására? Én amolyan Matlab/Octave feladat alternatívájaként tekintettem eddig rá.
- A hozzászóláshoz be kell jelentkezni
Nem igazán erre használom, de a marketing szöveg szerint általános elhasználásra is lehet jó, lehet vele web vagy native UI-t csinaéni, adatbazisokhoz is hozzáférsz, https://juliadatabases.org/ , valamint elvileg le is fordithatod, meg van valami webes dolog is. https://github.com/JuliaWeb/HTTP.jl. Valamint ha valami nagyon nincs valami python parancs ami kell, azt hívhatod PyCall-al, azt hiszem C-t native-ban támogatja, szóval van menekülő út is. Még olyat is láttam, hogy RPi4-et valaki robot irányításra használta, úgy, hogy a code Julia-ban futott a cuccon. https://juliaberry.github.io/
Nem mellesleg, ha valami adatelemzés is kell, akkor meg még jobb. A sebességre sem nagyon lehet panasz, bár van pár dolog ami nem szokványos itt is. Pl a tömbök indexelése 1-től indul. Ennek az oka, hogy matekban 1-től indexelünk. Abban igazad van, hogy a tudományos számításoknál ez nagyon nagy segítség és matekban járatlanabb programozókat ez zavarhatja, de szerintem pythonban azért bőven van zavaróbb dolog is.
- A hozzászóláshoz be kell jelentkezni
(x) Nem tudom
Amilyet az IDE használ. Nem is emlékszem, mikor kellett utoljára kézzel identálni valamit. Ha új blokk kezdődik, azt a szerkesztő magától beljebb kezdi. Ha létező kódot akarok beljebb/kijjebb húzni, arra van hotkey, megint nem egyesével kell a sorok elejére kitenni a whitespace-t.
- A hozzászóláshoz be kell jelentkezni
pythont ismered?
- A hozzászóláshoz be kell jelentkezni
Persze. Ott sem kézzel szoktam adagolni a szóközöket/tabokat.
Vagy nem értem a kérdést. Ha te kódolsz, akkor kézzel teszed ki a megfelelő whitespace-eket? Ha nulláról kell kódot írni, akkor az editor default whitespace lesz benne, ha máséba kell belenyúlni, akkor meg azt állítom be az editorban, ami a kódban van.
- A hozzászóláshoz be kell jelentkezni
Nem. Arra gondoltam, hogy az autoidentálás/formázás a python alatt minimális lehet, mivel befolyásolja logikát.
- A hozzászóláshoz be kell jelentkezni
A behúzás ott is szokott menni, mert ha a sor végén : van, az editor általában elvégzi az indentálást. A blokk vége már manuális, lévén nincs blokkzáró karakter.
- A hozzászóláshoz be kell jelentkezni
+1, viszont az VS Code-ban pl. mindig egy darab backspace, akkor is, ha 4 db space karakter a behúzás
- A hozzászóláshoz be kell jelentkezni
Ja, hogy úgy. Nem arra gondoltam, valóban, hanem csak az IDE-k "buta" automatikus behúzására.
- A hozzászóláshoz be kell jelentkezni
Python esetén van olyan.parancs, mint Rust esetén a
- cargo fmt
- vagy rustfmt *.rs
Azaz ami az identálást, kódkinézetet egységes kinézetre kalapálja?
- A hozzászóláshoz be kell jelentkezni
Ebben a pythonban ha elkezdi valaki/valami kalapalni az indentalast, akkor megvaltozik a program is. Gondolj bele, meg egy `unexpand`-ot sem ereszthetsz ra a kododra, anelkul hogy garantalt lenne hogy ugyazt csinalja mint eddig (oke, persze, ha varsz egy kicsit es nem csinalsz semmit, akkor is lehet hogy megvaltozik a program futtatasanak az eredmenye, ld. osztas atdefinialasa, stb). Mondjuk ettol fuggetlenul lehet ilyen tool, merthat ugye python ;)
- A hozzászóláshoz be kell jelentkezni
Hagyjuk már, nyilván nem lehet a felparsolt AST alapján azzal ekvivalens kódot generálni más formázással, ennek megfelelően nyilván nincs 77 python formatter.
- A hozzászóláshoz be kell jelentkezni
És van Pythonra is!
$ sudo apt install black
$ black --line-length=130 ./ # a ./ és alkönyvtáraiban levő kódot megkalapálja
- A hozzászóláshoz be kell jelentkezni
Szerintem tökmindegy. Másnál úgyis úgy jelenik meg, ahogy az ő IDE beállításai szerint jó, vagyis ahogy neki tetszik.
Abból lehet gond, ha többen dolgoznak ugyanazon a kódon és van, aki tab-ot használ, más meg space-t. Ilyenkor vagy meg kell előre állapodni benne, hogy melyik lesz, vagy check-in-kor automatikusan konvertálni.
disclaimer: ha valamit beidéztem és alá írtam valamit, akkor a válaszom a beidézett szövegre vonatkozik és nem mindenféle más, random dolgokra.
- A hozzászóláshoz be kell jelentkezni
1 tab = 4 space, mert úgy van beállítva az IDE-ben.
- A hozzászóláshoz be kell jelentkezni