[C++] fce GOTO

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod botepidemic 7. 10. 2005 18:03

Zdarec, dneska jsme ve skole programovali (no ono to moc programovani neni :D) a meli jsme za ukol udelat uplne primitivni programek, ktery by seradil sestupne bo vzestupne cisla, ktera clovek zadal normal z klavesnice. To bylo jednoduchy, ale zarazil me uciteluv postoj vuci me oblibene fci goto :P Rikal, ze je ta fce naprosta prasarna a ze to u nej v hodinach nesmim pouzivat. Je jasny, ze tuhle fci nebudu pouzivat u sloziteho a dlouheho zdrojaku/programu, ale myslim, ze kdyz to pouziju u kratkeho/jednoducheho programu (viz jak sem rikal), tak by to nemelo vadit, ne? :roll:
botepidemic
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod infmtk 7. 10. 2005 18:10

Myslim ze je lepsi naucit se vytvaret i kratke programy bez fce goto.
Přístroj, který je pod proudem, vypadá stejně jako ten, který není, jen je jiný na dotek.
infmtk
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Penguin007 7. 10. 2005 18:12

Bude to vadit. Odporuje zasadam funkcionalniho volani a pro jeji pouziti musi existovat sakra duvody, nerkuli, ze treba java ma goto v rezervovanych slovech, ale toto nema zadny vyznam, zadnou funkci. Goto bylo kdysi dano jako berlicka a ve funkcioalnich/proceduralnich jazycich nema byt. Ja jsem jej potreboval naposledy v dobach basicu. Zkuste si najit treba coding standards GNU programu, ale v podobnem duchu maji tuto "normu" temer vsechny firmy zabyvajici se vyvojem software.
Penguin007
Junior

Odeslat příspěvekod botepidemic 7. 10. 2005 18:35

jj, uz to pouzivat nebudu, ikdyz je to nekdy nejmene pracny zpusob :)
botepidemic
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod christian 7. 10. 2005 20:26

V OOP nema funkce GOTO zadnej vyznam... Jsou lepsi postupy jak se ji vyhnout..
die('Hacking attempt');

Kdo se chce zapojit do alpha testu nové verze aplikace SuperFórum pro Android, napište mi soukromou zprávu.
christian
Hlavní administrátor
Uživatelský avatar

Odeslat příspěvekod JIV 7. 10. 2005 21:15

ja nevim ja sem tam goto pouzijem niekedy je to najlahsie, najrychlejsie a naneprehladnejsie riesenie :)
All living things must eat.
As I have said, all living things must eat.
Podpora X
JIV
Pokročilý
Uživatelský avatar

Odeslat příspěvekod AZOR 7. 10. 2005 21:26

jj je to tak GOTO: to jest nepodmíněný skok neni moc hezkej v programu.
a) je to pak hodně nepřehledé ( ale co komu to vadí, že)
b) procesor pak nemá šanci využít pipline (má sice rozpracované instrukce ale je to na nic, když ho nějaké goto hodí někam jinam)
Marta Jandova's Absolute Monarchy Forever Rulezz - one country, one world, no wars, full of love.
ALL SHOULD DIE UNDER HER FLAG, AND FOR HER EYES !
AZOR
Junior
Uživatelský avatar

Odeslat příspěvekod Pytlík 7. 10. 2005 21:39

Možná mám zcela zcestný názor, ale dle mého názoru zrovna tvrdé GOTO nevadí pipeline - přece tady nejsou žádné pochybnosti o pokračování. Jinak ale, ač nejsem ani trochu fundovaný programátor, tak kromě assembleru a batů necítím potřebu použít nepodmíněné GOTO (a že tedy ty baty mívám pěkně rozsáhlé - 20kB není vyjímkou).
Pytlík
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Lemur 9. 10. 2005 14:51

Pouzivani goto vadi, ale ne kvuli procsoru, ale kvuli tomu, ze nema ve strukturovanem, potazmo objektovem programovani vubec co delat. Viz znamy Dijkstruv manifest z r. 1968 "Go To Statement Considered Harmful". Jedina situace, kde je goto tolerovatelne, jsou nejvnitrnejsi vnitrky operacniho systemu, driveru a podobnych veci, kde je nutne kaslat na struktorovane programovani ve jmenu rychlosti a pametove narocnosti. Ale v normalbni aplikaci nema goto co delat.

A to ohledne vysipani pipeline procesoru - pokud se podivate do vysledneho assembleru (pokud ho prekladac dokaze generovat - treba GCC to umi), stejne tam vetsinou bude tak jako tak nejaky skok, tazke v tomhle problem neni. Problem je v tom, ze protoze prekladac nema zadnou informaci o tom, co tim goto programator vlasne mysli a nemuze moc oprimalizovat. Zatimco id-else a switch-case jdou nahradit konstrukcemi s podminenimy skoky nebo uplne bez skoku (napr. podmineny presun), u goto vzdy skok bude.
Lemur
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod miho 9. 10. 2005 21:38

No nevim panove ale nekdy je goto tim nejprehlednejsim co se da udelat. Predstavte si nejake vnorene cykly a nekde uvnitr potrebujete vyskocit uplne ven. Jak to bez goto provedete? BTW nerikejte prosim, ze je goto funkce protoze me to silne drazdi. Je to prikaz.

Nekdo psal, ze goto vyprazdni pipeline. to ale neni pravda. Nepodmineny skok je rozhodne lepsi nez podmineny. Za for, while, sitch... se skryvaji prave podminene skoky.
Oh dear, I really ought to do something. But I am already in my pyjamas...
miho
Hlavní administrátor
Uživatelský avatar

Odeslat příspěvekod Turok 9. 10. 2005 22:36

z cyklu sa dostanes breakom
Turok
Kolemjdoucí

Odeslat příspěvekod petrJ(smazano) 10. 10. 2005 07:11

I "break" a "continue" jsou, co se tyka C++ standard codings, na hranici dobreho vkusu. A jako vzdy (az na vyjimky, ad goto :), neni nic cernobile.
petrJ(smazano)
Junior

Odeslat příspěvekod pexxi 10. 10. 2005 07:30

Kód: Vybrat vše
for (int i=1;i<100;i++)
for (int j=2;j<200;j++)
  for (int k=3;k<300;k++)
  {
   //  nejaky kod
   if nejaka_funkcia(i,j,k) ukonci_vsetky_cykly
  }


A teraz mi pani ukazte tie break-y, ktore mi vsetky cykly ukoncia...
Myslim, ze tu je pouzitie goto jednoznacne najprehladnejsie...
It's better to be wholly alone, than alone with ass-holes. ;-)
pexxi
Junior

Odeslat příspěvekod hujerek 10. 10. 2005 07:37

Treba takto:

bool done = false;

for (int i=1;i<100 && !done;i++)
{
for (int j=2;j<200 && !done;j++)
{
for (int k=3;k<300 && !done;k++)
{
// nejaky kod
if nejaka_funkcia(i,j,k) ukonci_vsetky_cykly

done = true; // ukoncuji vsechny cykly

}
}
}
hujerek
Kolemjdoucí

Odeslat příspěvekod Dzon 10. 10. 2005 07:40

pexxi píše:
A teraz mi pani ukazte tie break-y, ktore mi vsetky cykly ukoncia...
Myslim, ze tu je pouzitie goto jednoznacne najprehladnejsie...


Souhlas, goto sice nemam rad a nerad ho pouzivam, ale nekdy dobre mirene goto je lepsi nez sedm breaku... kazde dogma je skodlive :)
Zivim se programovanim a za svou karieru jsem goto pouzil 2x...
Dzon
Junior

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků