maciejo Temat założony przez niniejszego użytkownika |
Dlaczego nie używać etykiet w C++? » 2010-07-06 15:05:02 Mam kilka pytan: 1.Dlaczego mowi sie zeby nie uzywac etykiet , a nawet jesli , to zeby zapomniec o goto? 2.Czym mozna zastapic goto , poniewaz gdybym chcial zrobic to za pomoca petli , zajeloby mi to kilka razy wiecej czasu (musialbym sie jeszcze podszkolic i prawdopodobne , ze pisac kod od nowa) |
|
SeaMonster131 |
» 2010-07-06 15:10:58 Ja Ci tak profesjonalnie nie odpowiem, ale ja też UŻYWAŁEM goto itd. i mówili mi żebym go nie używał bo wtedy kod jest nieczytelny itp, goto powinno sie tylko używać w ostateczności :) Napisałem, że "używałem" bo dzisiaj napisałem program całkowicie bez goto i wyszedł mi lepiej niż z goto a użyłem tylko pętli do-while :) I faktycznie kod jest czytelniejszy, i w ogóle nie trzeba kombinować, jak to robiłem wcześniej :D Moja rada: Napisz sobie jakiś prosty przykład, ale taki w którym użyjesz goto, a potem goto zastąp np jakąś pętlą. Zobaczysz różnicę :) pozdr |
|
maciejo Temat założony przez niniejszego użytkownika |
» 2010-07-06 15:13:16 jesli to zmienia TYLKO czytelnosc kodu to moze chociaz chwilowo przy tym pozostane |
|
SeaMonster131 |
» 2010-07-06 15:15:47 No nie wiem czy TYLKO zmienia czytelność kodu :D Może nie tylko :D Ale lepiej żeby ktoś inny Ci to wytłumaczył, bo zrobi to lepiej:) |
|
maciejo Temat założony przez niniejszego użytkownika |
» 2010-07-06 15:18:01 No to w takim razie czekam na wyjasnienie od PR0 PS: Jak przeskoczyc do etykiety , ktora jest zadeklarowana pozniej od wywolania(inna funkcja) tzn. funkcja () { goto etykieta; } main() { etykieta : } prosze pomozcie |
|
TheLukon |
» 2010-07-06 15:35:47 Nie rozumie Cię zbytnio. Twierdzisz że musisz się podszkolić, a już korzystasz z funckji. To już coś potrafisz. Pętle z operatorami logicznymi albo bitowymi powinny w całości zastąpić instrukce goto. ;)
I powinno się zmienić temat postu, ponieważ etykieta to nie jest instrukcja goto, to wszystkie nazwy po ktorej wystepuje dwukropek ;) |
|
ison |
» 2010-07-06 15:37:32 nie da się (z tego co wiem) przeskakiwać do labla który znajduje się w innej funkcji. Sam nie wyobrażam sobie jakby to miało działać.
Korzystając z labli przestajesz rozumieć schematyczne działanie programu. Zwalnia cię to z myślenia i nie uczysz sie niczego. Zawsze istnieje rozwiązanie, które nie wymaga labli. Oprócz tego kod jest straszliwie nieczytelny i niemal że niezdatny do zdebugowania dla innej osoby. Szukanie jednego błędu może zająć kilka godzin w tym całym bałaganie. Jeśli już nie widzisz innej prostej drogi to możesz ewentualnie użyć labla w celach pisania jakiegoś programu dla siebie, lecz zdecydowanie odradzam. Żadna osoba na świecie nie poleciłaby ci korzystania z labli na początku nauki C++, ja bym im zaufał i je sobie odpuścił ;) |
|
DejaVu |
» 2010-07-06 16:00:09 Na temat etykiet powtarza się z definicji, że jest to zło i nie należy ich używać, ponieważ są konstrukcje w językach wysokiego poziomu, które są dużo prostsze w użyciu, krótsze i czytelniejsze. Programista powinien starać się tworzyć kod czytelny, a etykiety w rękach początkującego programisty to po prostu makabra. #include <cstdio>
int main() { for( int x = 0; x < 10; x++ ) printf( "for %d\n", x ); { int x = 0; label: if( x < 10 ) { printf( "label %d\n", x ); x++; goto label; } } return 0; }
Powyższy kod prezentuje zastosowanie w praktyce etykiety oraz pętli for. Konstrukcyjnie kod jest dużo krótszy gdy zastosujemy odpowiednie pętle zamiast etykiet. Ponadto zyskuje on znacznie na czytelności. Etykiety poprawiają czytelność kodu tylko w jednym wypadku, tj. wyjście z kilku pętli naraz: for( int a = 0; a < 10; a++ ) { for( int b = 0; b < 10; b++ ) for( int c = 0; c < 10; c++ ) { if( jakis_specyficzny_warunek ) goto do_glownej_petli; } do_glownej_petli: }
W powyższym przypadku uzasadnionym jest zastosowanie etykiet, jednak w dzisiejszych czasach dąży się do tego aby algorytmy były złożoności co najwyżej kwadratowej, więc stosowanie powyższej techniki raczej będzie zaliczało się do rzadkości. Reasumując: jeżeli nie znasz wszystkich rodzajów pętli języka w którym programujesz lub znasz je ale nie potrafisz zastępować kodu etykietowego pętlami to nie używaj etykiet, bowiem praktycznie zawsze zrobisz to źle. Kod ponadto będzie trudny w analizowaniu oraz w szukaniu ewentualnej przyczyny czemu działa źle. |
|
« 1 » 2 |