Linus kódja:
if (spin_trylock(&tty_lock.lock))
goto got_lock;
if (tsk == tty_lock.lock_owner) {
WARN_ON(!tty_lock.lock_count);
tty_lock.lock_count++;
return flags;
}
spin_lock(&tty_lock.lock);
got_lock:
WARN_ON(tty_lock.lock_owner);
Wilkens szerint így kéne kinéznie:
if (!(spin_trylock(&tty_lock.lock))){
if (tsk ==tty_lock.lock_owner){
WRAN_ON(!tty_lock.lcok_count);
tty_lock.lock_count++;
return flags;
}
}
WARN_ON(tty_lock.lock_owner);
Linus szerint a "goto" használata maximum az olyan hülye nyelvekben ártalmas, mint a Pascal, de szerinte a C-ben ez nem okoz gondot, ha kellően van alkalmazva. Szerinte olvashatóbb a "goto" kód, mint az if-ek sorozata.
A thread itt indul. Neked mi a véleményed?
- A hozzászóláshoz be kell jelentkezni
- 4190 megtekintés
Hozzászólások
goto rulez - lehet leugatni engem is ;)
- A hozzászóláshoz be kell jelentkezni
A programreszletben kb ugyanarra fordul le a ket kodreszlet.
Szerintem kicsit assembly emberek hasznaljak a goto-t, es ha tavoli ugrasok vannak benne, akkor valami hihetetlenul olvashatatlan, az eloreugras meg foleg, ha pedig keresztben vannak, akkor idegbajt kapsz.
Egyszoval lehet ertelmesen hasznalni, de nem vetnem be nagy mennyisegben a programomban, csak nagyon indokolt esetekben.
A break es continue-t en is hasznalom, mert nekem kezre all.
van egy ilyen dolog a ? : operatorral is, van ahol tiltjak. Esszel kell csinalni.
Laci
- A hozzászóláshoz be kell jelentkezni
Hi,
Mindenki olyan stílusban írja a programokat, amit szeret. Ha a program jól működik és megvalósítja azt, amire szánták akkor tök mindegy, hogy van goto vagy nincs.
Én speciel nem használom (c/c++).
Zé
- A hozzászóláshoz be kell jelentkezni
Nem igaz. Az, hogy egy program helyes csak egy a sok szempont közül. Egyáltalán nem mindegy, hogy ha ránézel a kódra akkor hányingert kapsz-e, vagy sem, és hogy mennyire kell megerõltetni magad, ha módosítani akarsz rajta.
Egyébként goto nem szimpatikus, de a break-continue (last-next:) nem rontja az olvashatóságot annyira, mint a sok if és flag. Indokolt esetben az ember elnéz egy goto-t, de ebben a kódrészletben szerintem nem indokolt.
- A hozzászóláshoz be kell jelentkezni
ide inkább break, mint goto
- A hozzászóláshoz be kell jelentkezni
A goto nagyon hasznos tud lenni.
Pl. tipikusan jol alkalmazhato az olyan library-k hasznalatakor
ahol sok hasznalat utan free-elendo struktura stb, van, es
az ember mindig ellenorzi a fuggvenyek visszateresi erteket es ha baj van akkor szepen meghivja a goto-t.
szoval a
goto out1
goto out2
goto out3
stb...
szerkezetre gondolok.
Persze mindez helyettesitheto sok-sok iffel, de ez tipikusan az
a helyzet amikor a goto atlathatobb kodot eredmenyez.
balsa
- A hozzászóláshoz be kell jelentkezni
Írtam már egy-két progit c++-ban (épületgépészet, épületvillamosság témakörben AutoCAD-hez (windowsos, lehet sydney)) de még nem volt olyan probléma, amihez feltétlenül goto kellett volna. A legmélyebb if struktúrám 3 szint mély.
Tény, hogy sok dolgot egyszerübben és szebben meg lehet oldani goto-val. Basic-es és Pascal -os koromban én is használtam. De egy idő után már én is eltévedtem benne (modjuk úgy 3 hónap elég hozzá).
Amúgy egy ismeretlen kód goto-val vagy a nélkül is lehet ronda. Mindenkinek a saját gyereke tetszik a legjobban.
A lényeg: fölösleges a goto témát túlragozni. Mindenki saját belátása szerint dönt. Ha szükség van rá, használni kell és kész.
- A hozzászóláshoz be kell jelentkezni
2.4.20-ac1:
sunshine:/usr/src/linux# egrep -ir "goto" * | wc -l
17101
Wilkens-sel atiratjuk mindegyiket if-re. ;-)
- A hozzászóláshoz be kell jelentkezni
Arra senki nem gondolt, hogy ez csak egy kod-reszlet?
Ki tudja az eredeti kodban mi van, gondolok itt arra, hogy a got_lock labelt mas is hasznalhatja, sokkal elorebb !
- A hozzászóláshoz be kell jelentkezni
>Amikor te rendszerprogramozóként tanultál, akkor Pascal ismereteknél nem nagyon mondhatták, hogy kerülendő a "goto", "break" "continue" átkozott hármas, ugyanis akkor a Pascalban sem break, sem continue nem volt :)))
Az object oriented pascalba se volt? Hmm. Lehet akkor C oran mondtak. Mindegy erre konkretan emlekszem, mert ezt allandoan elmondtak hogy ez nem hogy nem elegans, hanem tilos. Sot a szakdolgozatnal az oreg rutin viszgaelnok meg ra is keresett ezekre a szovakra a forrasban.
- A hozzászóláshoz be kell jelentkezni
Az mar viszont imho baj lenne. Pont azt szoktak mondani, hogy a tavoli goto-k miatt lesz a kod atlathatatlan. Az ilyen kozeli ugrasokat meg megbocsajtjak (pl. Linus kodja), de azokat mar nem. Foleg, ha nem allandoan nezed a forraskodot. "Mi van ha egy ev mulva veszed elo, mert valamit modositani kell?"
- A hozzászóláshoz be kell jelentkezni
LOL latom ez mar majd' egy eve szurja a szemed. :-)
- A hozzászóláshoz be kell jelentkezni
en soha eletemben nem hasznaltam meg a goto-t. viszont lattam egy sracot egy versenyen, aki meg commodore-on tanult basicben programozni, es mindenhol if feltetel then goto xy formatumu vizsgalatokat hasznalt. na imho az LOL volt a javabol. elhiszem, hogy van amikor hasznos tud lenni, de en akkor is inkabb elkerulom a hasznalatat, ha kisebb lesz tole a kod. nem tudom miert, bennem ez igy alakult ki. az meg, hogy linus hogy hasznal-e goto-t, vagy nem, erre a muveszetekben azt mondjak, hogy muveszi szabadsag :) pl egy olyan kolto, mint Arany, vagy Petofi megsertheti a magyar nyelv szabalyait, vagy egy olyan zongoramuvesz, mint pl Cziffra Gyorgy megengedheti maganak, hogy a Dongo c. munek a gyors felso szolamat oktavparhuzamban jacca (hozzateszem, hogy nem semmi, amit csinal....).
Ugyanigy, egy olyan nevu, es elismertsegu programozo, mint Torvalds, megengedheti maganak, hogy megsertsen egy (amugy sem tul biztos labakon allo) iratlan szabalyt. Viszont epp ugy, ahogy az iment felsorolt nagy muveszek, o sem viheti/viszi ezt tulzasba, mert az mar az esztetikum (muveszetek eseteben)/a kod olvashatosaganak (program eseten) rovasara megy.
- A hozzászóláshoz be kell jelentkezni
Hat azert egy nyamvadt .c filet csak atnezek mielott editalnam.
Amugy nem olyan ordonsgosseg ez a goto mint amekkora felhot keritenek kore...
- A hozzászóláshoz be kell jelentkezni
A fenti kodreszlet amugy mind2 verzioja jo es semelyik se elitelendo, imho.
Amugy nezd meg ffmpeg/libavcodec/mjpeg.c:decode_frame -et es a benne levo goto-kat, imho az ugy atlathatobb, mintha kulon if-ekbe irtam volt az egeszet. (akkor sokkal nagyobb lenne..)
- A hozzászóláshoz be kell jelentkezni
Na ja. Bár legjobb tudomásom szerint nem úgy készülnek az új kernelverziók, hogy egy hexeditorral nekiesnek a /vmlinuz-nak... Szóval szerintem nem kell tűzzel-vassal irtani a GOTO-t (főleg az ilyen hardverközeli kódokban, mint a kernel), de csak erősen indokolt esetben kéne használni.
Nálunk a főiskolán pl. ha struktúrált programnyelvből vizsgáztál (elsősorban Pascalból, de C-ból is), tutter bukta volt a GOTO használata. Úgyanígy pl. az exit() (vagy mi van pascalban, de rég volt....) használata is, pedig akkor nem azt írtad, hogy if "valami_fontos_nem_ok" then exit;, hanem hogy if NOT "valami_fontos_nem_ok" then begin "az_EGÉSZ_program" end;
Hát ne mondja senki, hogy ez átláthatóbb. Csak épp nem lehet belőle Jackson-ábrát rajzolni (boaaaa)...
end.
- A hozzászóláshoz be kell jelentkezni
>nálunk a főiskolán pl. ha struktúrált programnyelvből vizsgáztál (elsősorban Pascalból, de C-ból is), tutter bukta volt a GOTO használata.
Na pontosan erre akartam kiterni.
BTW: aki tanult Pukler Tóni-nál (irt egy-ket algoritmusos konyvet, a gyori foiskolan is tanit (mostmar egyetem)), es algoritmusa nem volt jo, mert volt benne goto az tuti kasza volt ;-)
- A hozzászóláshoz be kell jelentkezni
Most olvastam egy igen tanulságos, tudományos értekezést:
idézet:
"
Néhány megfigyelés az igazi programozóról, és a strukturált programozásról:
1. Az igazi programozó nem fél a GOTO-tól.
2. Az igazi programozó öt lap hosszú DO ciklust ír anélkül, hogy belezavarodna.
3. Az igazi programozó szereti az aritmetikai IF-eket - érdekesebb tőlük a program.
4. Az igazi programozó önmódosító kódot ír - különösen akkor, ha meg bír vele spórolni 20 nanoszekundumot egy kis ciklus közepén.
5. Mivel a FORTRANban nincs strukturált REPEAT, UNTIL vagy CASE utasítás, az igazi programozónak nem kell ügyelnie arra, hogy ne használja ezeket. (De persze szükség esetén szimulálhatja őket GOTO-val.)
"
forrás: http://www.szabilinux.hu/orlando_unix/igazi.html
- A hozzászóláshoz be kell jelentkezni
oké, nyertetek :)
nagyon el vagyok már perlesedve, ahol a külsõ ciklusra lehetne tenni egy címkét
Padre
- A hozzászóláshoz be kell jelentkezni
nemide.
- A hozzászóláshoz be kell jelentkezni
megint nemide.
- A hozzászóláshoz be kell jelentkezni