Сообщение Re[5]: Лямбда как goto от 22.04.2016 12:43
Изменено 22.04.2016 12:54 _hum_
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, _hum_, Вы писали:
__>>это тоже не совсем удачный, ибо можно
__>>
BFE>А ещё можно исключение подбросить и поймать
BFE>Такой код сложнее читать и он потенциально менее эффективен.
этот код наоборот в явном виде прописывает намерения программиста — что будет идти поиск до той поры, пока что-то не будет найдено. то есть, на первое место ставится логика, а не техника (может, и в ущерб производительноси, хотя в данном случае бабушка надвое сказала). к тому же струтурированность (отсутствие прыжков) помогает легко понять, когда и куда будет происходить выход.
BFE>Здравствуйте, _hum_, Вы писали:
__>>это тоже не совсем удачный, ибо можно
__>>
__>>bool bFound = false;
__>>while(!bFound)
__>>{
__>> for(int i = 0; (i < 100) && (!bFound); i++)
__>> {
__>> if(i == 77)
__>> {
__>> std::cout << "77! go out!" << std::endl;
__>> bFound = true;
__>> }
__>> }
__>>}
__>>BFE>
BFE>Такой код сложнее читать и он потенциально менее эффективен.
Re[5]: Лямбда как goto
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, _hum_, Вы писали:
__>>это тоже не совсем удачный, ибо можно
__>>
BFE>А ещё можно исключение подбросить и поймать
BFE>Такой код сложнее читать и он потенциально менее эффективен.
этот код наоборот в явном виде прописывает намерения программиста — что будет идти поиск до той поры, пока что-то не будет найдено. то есть, на первое место ставится логика, а не техника (может, и в ущерб производительноси, хотя в данном случае бабушка надвое сказала). к тому же струтурированность (отсутствие прыжков) помогает легко понять, когда и куда будет происходить выход.
upd. кстати, в качестве принципиального отличия выхода по флагу от выхода по прыжку можно рассматривать отсутствие у первого гарантии того, что если в каком-то месте стоит код bFound = true, то цикл будет прерван (в отличие от return, break)
BFE>Здравствуйте, _hum_, Вы писали:
__>>это тоже не совсем удачный, ибо можно
__>>
__>>bool bFound = false;
__>>while(!bFound)
__>>{
__>> for(int i = 0; (i < 100) && (!bFound); i++)
__>> {
__>> if(i == 77)
__>> {
__>> std::cout << "77! go out!" << std::endl;
__>> bFound = true;
__>> }
__>> }
__>>}
__>>BFE>
BFE>Такой код сложнее читать и он потенциально менее эффективен.
upd. кстати, в качестве принципиального отличия выхода по флагу от выхода по прыжку можно рассматривать отсутствие у первого гарантии того, что если в каком-то месте стоит код bFound = true, то цикл будет прерван (в отличие от return, break)