no goto?
42 отговора
1621 прегледа
no goto?
Taka...
Imame slednia code:
for ( int i = 0; i < 10; i++ )
{
TryAgain:
// malko code
while ( condition )
{
if ( f(i,l) == true )
{
l++;
goto TryAgain;
}
else
{
// edna kamara code
}
// oste edna kamara code
}
}
Kak da se izbegne goto v tozi sluchai?
Imame slednia code:
for ( int i = 0; i < 10; i++ )
{
TryAgain:
// malko code
while ( condition )
{
if ( f(i,l) == true )
{
l++;
goto TryAgain;
}
else
{
// edna kamara code
}
// oste edna kamara code
}
}
Kak da se izbegne goto v tozi sluchai?
с continue няма да стане
по принцип може да се избегне, но ще стане още по-нечетливо. аз в такива случаи пиша гото и не ми мигва окото.
Re: с continue няма да стане
i koe mu e nechetlivoto na continue?
e ako iskash da izlezesh niakolko niwa na wlojenost, mai
samo s goto stawa chetliwo... za men.
Guru sigurno bi izpolzwal exception ako e na C++, no se
symniawam dali ima namerenie poweche da polzwa
takiwa inferior sredstwa kato ima VB.NET...
drugia wariant e da si uprostish algorityma,
tam mai winagi ima kakwo da se naprawi :)
e ako iskash da izlezesh niakolko niwa na wlojenost, mai
samo s goto stawa chetliwo... za men.
Guru sigurno bi izpolzwal exception ako e na C++, no se
symniawam dali ima namerenie poweche da polzwa
takiwa inferior sredstwa kato ima VB.NET...
drugia wariant e da si uprostish algorityma,
tam mai winagi ima kakwo da se naprawi :)
Re: no goto?
слагаш вътрешния цикъл във функция.
без майтап в една фирма големи глави са писали кодинг станадарт да не се ползва нито break, нито continue, a return osven v края на функция не се препоръчва.
без майтап в една фирма големи глави са писали кодинг станадарт да не се ползва нито break, нито continue, a return osven v края на функция не се препоръчва.
Re: с continue няма да стане
>> e ako iskash da izlezesh niakolko niwa na wlojenost, mai
Е за какво ги влагаш едно в друго тия няколко нива на "вложеност", след като можеш да скачаш наляво надясно през нивата ? Нали затова кода трябва да е структуриран, от едно място да се стига до друго ясно и четливо.
Ако в един цикъл вложиш друг, трябва ЗАДЪЛЖИТЕЛНО от вложения цикъл да може да се излиза само в неговия parent цикъл, иначе за какво ги nest-ваш един в друг ? Ако може да се скача наляво надясно във nested цикли, то тогава по дефиниция проблема не трябва да се решава с nested цикли а със
отделяне на кода във методи и викане на съответните методи.
Именно и затова 99% от употребата на "гото" се abuse-ва и учи на лошо кодиране, щото така е по-лесно да се пишат спагети, а после който оправя бъговете той да му мисли.
Е за какво ги влагаш едно в друго тия няколко нива на "вложеност", след като можеш да скачаш наляво надясно през нивата ? Нали затова кода трябва да е структуриран, от едно място да се стига до друго ясно и четливо.
Ако в един цикъл вложиш друг, трябва ЗАДЪЛЖИТЕЛНО от вложения цикъл да може да се излиза само в неговия parent цикъл, иначе за какво ги nest-ваш един в друг ? Ако може да се скача наляво надясно във nested цикли, то тогава по дефиниция проблема не трябва да се решава с nested цикли а със
отделяне на кода във методи и викане на съответните методи.
Именно и затова 99% от употребата на "гото" се abuse-ва и учи на лошо кодиране, щото така е по-лесно да се пишат спагети, а после който оправя бъговете той да му мисли.
Re: no goto?
bool gotoSux;
for ( int i = 0; i < 10; i++ )
{
do
{
gotoSux = false;
// malko code
while ( condition )
{
if ( f(i,l) == true )
{
l++;
gotoSux = true;
break;
}
else
{
// edna kamara code
}
// oste edna kamara code
}
}
while (gotoSux);
}
Re: no goto?
съгласен съм с изваждането на функцията.
аз виждам грозно написана огромна процедура, която прави 50 неща ( ако броим коментарите за камарите код ). разделянето на малки процедури е най-малкото, което може да се направи.
гото-то само по себе си не е лошо. то е СИМПТОМ на лошите неща, които ни дебнат :->
ако гледаме само циклите --> виждам нещо ( вътрешния ), което се опитваме да направим 10 пъти. ами защо нещото не се издърпа навън и не му се сложи четливо име. ExtractMethod рефакторинга визирам.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
аз виждам грозно написана огромна процедура, която прави 50 неща ( ако броим коментарите за камарите код ). разделянето на малки процедури е най-малкото, което може да се направи.
гото-то само по себе си не е лошо. то е СИМПТОМ на лошите неща, които ни дебнат :->
ако гледаме само циклите --> виждам нещо ( вътрешния ), което се опитваме да направим 10 пъти. ами защо нещото не се издърпа навън и не му се сложи четливо име. ExtractMethod рефакторинга визирам.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: no goto?
Ми не избягвай "goto"! :)
Мисли, както казват, позитивно:)
Повечето програмисти си сменят работата през година, две.....
От това следва, че няма да си ти човека, който ще го оправя след време.
От това следва - създай малко работа и за бъдещите програмисти:)
Всичко на готово ли ша да получават, я!:)
Мисли, както казват, позитивно:)
Повечето програмисти си сменят работата през година, две.....
От това следва, че няма да си ти човека, който ще го оправя след време.
От това следва - създай малко работа и за бъдещите програмисти:)
Всичко на готово ли ша да получават, я!:)
Re: no goto?
>От това следва, че няма да си ти човека, който ще го оправя след време.
но и следва, че ще оправяш чужди "шедьоври" на друго място нали?
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
но и следва, че ще оправяш чужди "шедьоври" на друго място нали?
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: no goto?
Nai-ochevidnoto za men e, vmesto da izpolzvash for, da izpolzvash while i da manipulirash yavno indexite. Tui kato, kakto gledam, v tozi sluchai izpolzvaneto na goto celi da se izbegne avtomatichnoto uvelichavane na i.
A shto se otnasya do tova dali izpolzvaneto na goto tryabva da se izbyagva i dali vodi do nechetliv kod: az ryadko go polzvam, no kato mi se naloji, ne me plashi. Spored men ima sluchai, kogato tova prosto e nai-efektivno. A chetliv kod moje da se pishe i na assembler, kudeto izpolzvaneto na podobna komanda e estestveno. Taka che dobrata struktura ne opira do tova dali da se polzva goto ili ne.
A shto se otnasya do tova dali izpolzvaneto na goto tryabva da se izbyagva i dali vodi do nechetliv kod: az ryadko go polzvam, no kato mi se naloji, ne me plashi. Spored men ima sluchai, kogato tova prosto e nai-efektivno. A chetliv kod moje da se pishe i na assembler, kudeto izpolzvaneto na podobna komanda e estestveno. Taka che dobrata struktura ne opira do tova dali da se polzva goto ili ne.
Re: no goto?
> Всичко на готово ли ша да получават, я!:)
Mi da, po-dobre na goto-vo :-)
Mi da, po-dobre na goto-vo :-)
Re: no goto?
mi s continue sha dignesh i s edno
a ne I :-)
taka kato gledam primera ...
i posle sha si tyyyrsish greshkata ....
доказано дебелоглав
a ne I :-)
taka kato gledam primera ...
i posle sha si tyyyrsish greshkata ....
доказано дебелоглав
Re: no goto?
Истинският програмист не се притеснява да използва goto. Това, че водело до нечетлив код, и други подобни твърдения са чиста проба глупости, породени от нечие сляпо вманиачаване в идеите на структурното програмиране, и от нечий друг мързел при проследяването на логиката на алгоритъма. goto си е напълно естествена операция и премерената му употреба често води до по-ефективен и дори по-четлив код (примерно изнасянето на пет реда код в отделна функция само и само за да се избегне goto е тъпо - добавят се излишни извиквания на функцията, а също така става трудно четенето на кода без специален редактор с възможности за крос-функционална навигация). Но щом някой има непреодолимото желание да си губи времето в мислене на изключително хитър (и същевременно неефективен) алгоритъм, с цел избягане на употребата на goto, то никой не може да го спре.
Така че съм напълно съгласен с теб.
"Смърт за goto. Да живее goto."
П.П. Като стана дума за спагети в по-горните постове... Аз много обичам спагети, но понеже съм доста сакат в готвенето (все пак съм теоретичен физик, а не (био-)химик или нещо подобно) си купувам готови сосове от Фантастико. Обаче нещо съм зациклил върху крайно множество типове сосове. Идеи как да изляза от цикъла без goto?
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Така че съм напълно съгласен с теб.
"Смърт за goto. Да живее goto."
П.П. Като стана дума за спагети в по-горните постове... Аз много обичам спагети, но понеже съм доста сакат в готвенето (все пак съм теоретичен физик, а не (био-)химик или нещо подобно) си купувам готови сосове от Фантастико. Обаче нещо съм зациклил върху крайно множество типове сосове. Идеи как да изляза от цикъла без goto?
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Re: no goto?
> примерно изнасянето на пет реда код в отделна функция само и само за
>да се избегне goto
pri men 5 reda otivat kym gornata granica za metod. ot tam veche mirishe, che metoda pravi poveche ot edno neshto!
az sym myrzeliv i glupav i iskam da si cheta koda lesno! zabelqzvam, che defektite, koito imam nakraq sa znachitelno po-malko.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
>да се избегне goto
pri men 5 reda otivat kym gornata granica za metod. ot tam veche mirishe, che metoda pravi poveche ot edno neshto!
az sym myrzeliv i glupav i iskam da si cheta koda lesno! zabelqzvam, che defektite, koito imam nakraq sa znachitelno po-malko.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
при нормална работа - да!
мисля че случаито когато съм използвал гото, всички без един два са били за обработка на грешки. тогава се прекратяват тотално цикли микли и всякаква работа и се завръща до някаква по-предна точка където да речем се изискват нови данни или нещо такова.
тия са откачени
айде няма да питам дали на case слагат break, щото ще е заяждане. обаче като се замисля колко много неща правя с break, просто си мисля че много са утежнили живота на програмистите си. сигурен съм че всичко може да се напише и без тия оператори, ама за какъв чеп? това не само няма да намали бъговете, ами напротив - ще ги увеличи поради усложняване на алгоритмите с цел натъпкването им в светите канони.
да бе
ето ти елементарен пример:
N мерен масив (N > 1), искаш да го обходиш за да намериш елемент с определена стойност.
ако ми покажеш алгоритъм, който да е по-четлив от такъв с директно излизане от най-вътрешния цикъл, шапка ти свалям.
N мерен масив (N > 1), искаш да го обходиш за да намериш елемент с определена стойност.
ако ми покажеш алгоритъм, който да е по-четлив от такъв с директно излизане от най-вътрешния цикъл, шапка ти свалям.
Re: да бе
да не говорим за ония смахнатите, дето освен гото са забранили break и continue! разбира се може просто да се извърти пълния масив и номерата на индексите да се запишат. обаче е грозно и средно 2 пъти по-бавно.