Информация об изменениях

Сообщение Re[5]: Лямбда как goto от 22.04.2016 12:43

Изменено 22.04.2016 12:54 _hum_

Здравствуйте, B0FEE664, Вы писали:

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_, Вы писали:


__>>это тоже не совсем удачный, ибо можно

__>>
__>>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)