ďťż

Ładny brzuch

Witam,
tyma razem zadam pytanie, kóre nie jest dla mnie porblem, ale bardzo chetnie poznałbym Waszą opinie na ten temat.
Mianiowicie chodzi mi o instrukcje goto w Delphi. W wielu ksiażkach, kursach, na wilu forach spotykam się ze stwierdzeniem zeby unikać stosowania goto. Gdzieś nawet jeden z tórców Delphi (chyba Allen Bauer) wypowiedział się w nastepujący sposób na temat goto:

"Programista, który stosuje goto, nie zna w ogole ObjectPascala"

Hmm.. no ale gdyby się głebiej zastanowić? Goto - skok do miejsca w kodzie oznaczonego etykietą label. No ale np. rekurencja? Przecież wywoływnie procedurey prze samą siebie to też jest skok i miejsce w kodzie? Przecież program sie cofa do początku procedure. Tak samo z pętlami. A jeszcze bardziej obrazuje to wywoływanie procedurey przez inną procedure. Przecież to wszystko powoduje skok w jakieś miejsce w kodzie. Więc czemu goto jest takie nielubiane?

Czekam na Wasze opinie na ten temat.
Pozdrawiam.

Alhohol to twój wróg, więc lej go w mordę!



ja kiedyś dawno temu :D raz zastosowałem goto i jakoś żyje (i nawet program działa (dziwne)), ale ogólnie panuje opinia, że nie powinno się stosować tego. Jednak po coś zostało to stworzone :D A co do rekurencji to na 4p ostatnio czytałem arta i tam nic nie było wspomniane o goto

//----------------------
admin(at)beldzio(dot)com
www.beldzio.com
www.beldzio.com/forum
gg :3183960

Moim zdaniem goto jest kompletnie zbedną instrukcją w nnowoczesnych jęykach programowania(orientowanych obiektowo) zostawiono ją pewnie dla zgodności z Pascalem. W Delphi i C++ wogóle nie potrzebne jest stosowanie tej istrukcji, precz z GoTo!!!

-------------- --------------- ------------- --------------- ----
Tabela II ligi:
1. Korona Kielce 6 16 5 1 0 10-3 2 1 0 3-1 3 0 0 7-2
2. Kujawiak Włocławek 6 15 5 0 1 7-3 3 0 0 4-1 2 0 1 3-2
3. GKS Bełchatów 6 14 4 2 0 11-3 3 0 0 9-2 1 2 0 2-1

cytat:Bełdzio napisał:

... A co do rekurencji to na 4p ostatnio czytałem arta i tam nic nie było wspomniane o goto

Bełdzio.. tak wiem.. ale nie chodziło mi o to ze w rekurencji jest goto. Miałem na mysli porównanie rekurenci do goto. Bo przecież wywołanie proceduiry przez samą siebie to też skok w jakieś miejsce w kodzie czyli tak jak goto, tyle tylko ze bez edytkiety, no moze etykietą można nazwać nazwę procedure :D.
No ale chodziło mi poprostu o porównanie.

Alhohol to twój wróg, więc lej go w mordę!



Otóż jak zwykle śpieszę z wyjaśnieniem :-)
Wśród języków programowania możemy wyróznić od 4 do 5-6 ich generacji (obecne języki łatwiej będzie sklasyfikować dopiero w przyszłości, tak jak obecnie bez problemu możemy sklasyfikować te z pszeszłości). Otóż w starszych generacjach instrukcje programu wykonywane były 'jak leci' - krok po kroku (jak np. w Basicu) - jedyna możliwością sterowania programem/omijania instrukcji była właśnie dyrektywa goto i etykiety. Kolejne generacje jezyków programowania funkcjonują trochę inaczej, np. programy windowsowe pisane obiektowo działają w oparciu o zdarzenia. Dlatego uważa się, że uzywanie instrukcji goto np. w Object Pascalu (Delphi) to anachronizm, 'cofnięcie się w generacjach' - i rzeczywiście - jest to jakby zaprzeczenie całej idei programowania zorientowanego obiektowo. Ale z drugiej strony, skoro taka instrukcja istnieje i nic nie wskazuje na to, by w przyszłości miała zniknąć, to można ją stosować - ostateczny wybór organizacji kodu należy w końcu do programisty, no nie?
Wykładu udzielił profesor doktor rehabilitowany nobilitowany Stiepan Suchowiejcew aka CJ_HNO :rotflmao:
Czy wszystko teraz jasne? 8) Uwagi proszę kierować na adres e-mail stiepans@vladimir.edu.ru ;)

"Software is like sex - it's better when it's free." Linus Torvalds | http://hno.freeshell.org/ |

No to moje zdanie :) :
Goto jest przydatne. Czasem bez tego trzeba by było dorabiac kilkanaście linijek, a po co skoro mamy GOTO :)
Ale jeżeli ktoś zamiast pętli while czy for stosuje GOTO no to nie pociągnie daleko... :)

Osobiście najczęściej stosuje to w dwóch miejscach (label start, end). przydaje sie czasem, żeby wyjść z całego bloku instrukcji warunkowych :)

----
m@il: ali88@tlen.pl
GG: 2083160

Jeżeli ktoś ją chce stosować, jego wola.Niby powinno się jej unikać.

Ed

jedno jest niezmienne : użytkownika naszego programu nie obchodzi jak jest napisany dla niego ważne jest żeby program działał jak najlepiej

//----------------------
admin(at)beldzio(dot)com
www.beldzio.com
www.beldzio.com/forum
gg :3183960

Ja dorzucę swoje zdanie, otóż używanie goto jest złym stylem programowania, poniewarz pracując np. w grupie, oddając kod stworzony przez siebie do kolegi z zespołu, kolega ten musi się zapoznać z tym co napisaliśmy, a jak wiadomo (może nie dla wszystkich) instrukcje goto bardzo komplikują kod. Wyobraźcie sobie, czytam kod, który ma 1000 linii, na 5 linii mam etykietę dla goto, a na linii 999 dopiero jej wywołanie, wyobraźcie sobie, że jest więcej instrukcji goto, trzeba wtedy co chwile wracać do miejsca wystąpienia etykiety goto i dopiero można sprawdzić, co przez wywołanie etykiety chcieliśmy zrobić. Więc podsumowując instrukcje goto bardzo spowalniają analizę kodu.
Wykład napisany przez prof. Neohacker'a, pozdro dla CJ_HNO ;)

Pozdro for All

gg:4826295 | neohacker@interia.pl

Goto na pewno nie jest zbędne. Bo kto by robiąc progrm dodawał zbędne opcje?

Artur Owczarek

cytat:owca napisał:

Goto na pewno nie jest zbędne. Bo kto by robiąc progrm dodawał zbędne opcje?

Jak juz napisano powyzej - dla zgodnosci z Pascalem. I nie robiac program tylko projektujac jezyk programowania, ew tworzac jego specyfikacje.

"Człowieka można zniszczyć ale nie pokonać"
Ducha nie można ani zniszczyć ani pokonać.
Ducha X - nawet nie pytaj.
;)

Goto jest instrukcją jak każda inna. Można powiedzieć, że jej używanie to idiotyzm,bo to jest skok bezwarunkowy. Jeśli jest obawa zapętlenia,:

label:;

...

goto label
to można dodać przecież instrukcję warunkową:

label1:;

...
if x=1 then goto label2;

goto label1:;

label2:;

Ta instrukcja, mimo,że przestarzała i zastąpiona wieloma innymi, warunkowymi, może być używana, ale po co się cofać?

Dos is the best.
http:www.turbopascal.republika.pl

Ja kiedy się jeszcze bawiłem w "programach do robienia gier", bardzo często używałem tej funkcji:] A co do tego, że jest to zbędna opcja to jestem przeciwny. Czaszem może się przydać:) np. wtedy kiedy zapomnisz nie chce się wprowadzać jakiejś pętli, a chcesz wrócić się na prawie na początek jakiejś procedury, bądź funkcji:]
Taka jest moja opinia...

Książki podają, że goto jest zbędne, bo często używane może doprowadzić do czegoś co jest nazywane "spagetti". Można sobie bowiem wyobrazić wielki program w którym często wykożystano goto przez co odwołujemy sie np. do linii 10 następnie 115 wracamy do 90 itd. Powoduje to znaczne zagmatwanie wizerunku strony i w efekcie trudności z jego późniejszym odczytaniem. Poza tym skok taki może nieopacznie przenieść nas do wewnątrz jakiejś pętli i wywołać bardzo nieoczekiwane skutki. :cheesy:

UNICORN

To i ja się wypowiem ;)
Zastosowałem kilka razy instrukcję goto (c++), nawet raz w programie opartym o "czyste" WinAPI - po prostu kod obsługi komunikatu WM_PAINT zawierał kilka pętli w pętli (rysowanie różnych dziwnych wzorków na ekranie :cheesy: ) i próbując wyjść z samego środka tych pętli najłatwiej było mi użyć właśnie goto...

Asus A7V-133 Raid, Athlon XP1800+, 512 MB SDR, Quadro FX 500 (@360/720), Barracuda.7 40 GB, SB Live! 5.1, LAN 1 Gbit/s, Fortron 300W, audio 350W, Win XP Pro SP1 :)

eh doczepiliscie sie do tego goto strasznie ;) ze unikac, ze pozostalo dla zgodnosci itp. niewatpliwie zle jest naduzywac goto, ale ono jednak jest czescia chyba wszystkich jezykow i to w cale nie przez pozostalosc z pascala. mozna by sie doszukiwac pochodzenia u zrodel, czyli assemblera, w ktorym nie ma petli for, while, instrukcji switch itp tylko sa instrukcje porownan ktore odpowiadaja if'om i skoki warunkowe i bezwarunkowe, ktore dla mnie wygladaja jak goto ;]
a co do czytelnosci kodu to goto moze w niektorych sytuacjach pomoc i dodatkowo przyspieszyc. czytalem dawno dawno o tym gdzies na necie. pamietam do dzis jeden przyklad wyjscia z zagniezdzonych petli... bez goto nie da sie tego rozwiazac czytelniej i szybciej. z tego co pamietam to czesc plikow jadra linuxa uzywa(lo) dosc obficie instrukcji goto, no chyba ze ci programisci tez sa wg was do dupy :chytry:

pozdrawiam
pepsi^no1

Goto nie jest takie złe, ale tylko wtedy gdy jest używane jeden raz w małym programie. Jeśli masz program 1000 linii kodu, to ktoś kto ogląda takii kod jesli zobaczy instrukcję goto to musi przeszukiwać cały kod żeby znaleźć kotwicę do niego (tochyba nie jest zbyt ciekawe). Po drugie każdą instrukcję goto można zastąpić pętlą, więć precz z goto!

Freeware rlz - precz z komercją

GG: 8133488

Marek Pestkowski (marek_merlin)

cytat:Neohacker(Ja) napisał:

(...)oddając kod stworzony przez siebie do kolegi z zespołu, kolega ten musi się zapoznać z tym co napisaliśmy, a jak wiadomo (może nie dla wszystkich) instrukcje goto bardzo komplikują kod. Wyobraźcie sobie, czytam kod, który ma 1000 linii, na 5 linii mam etykietę dla goto, a na linii 999 dopiero jej wywołanie, wyobraźcie sobie, że jest więcej instrukcji goto, trzeba wtedy co chwile wracać do miejsca wystąpienia etykiety goto i dopiero można sprawdzić, co przez wywołanie etykiety chcieliśmy zrobić.(...)

cytat:marek_merlin napisał:

(...)Jeśli masz program 1000 linii kodu, to ktoś kto ogląda takii kod jesli zobaczy instrukcję goto to musi przeszukiwać cały kod żeby znaleźć kotwicę do niego (tochyba nie jest zbyt ciekawe).(...)

Czy ja czasem nie pisałem tego samego [:/], nawet tyle samo linii kodu napisałeś
Xeroboy:! :cheesy:

PS. Mam nadzieje, że nie pisałeś tego po to by nabić sobie post, tylko poprostu nie widziałeś, że taka odpowiedź już była...

Pozdro for All

gg:4826295 | neohacker@interia.pl

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •