Здравствуйте, smeeld, Вы писали:
S>>Тем более, что внутри вложенного while в секции else вроде как continue и не к чему... Говнокодом попахивает.
S>Нет, приятель, это борьба с оптимизирующими компиляторами. Он там, в том месте, запросто может завершить цикл когда это не нужно. Вы просто не знаете что скрывается за той функцией, стоящей во главе while.
Вы пытаетесь сказать, что между вот этим:
while(journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0){
if(node_descp->get_current_storage_chunk() >= get_journal_storage_chunk_count()){
break;
}
else {
node_descp->set_current_storage_chunk(node_descp->get_current_storage_chunk());
node_descp->set_shared_segment(journal_store(node_descp->get_current_storage_chunk()).first_descriptor_shared());
continue;
}
}
и вот этим:
while(journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0){
if(node_descp->get_current_storage_chunk() >= get_journal_storage_chunk_count()){
break;
}
else {
node_descp->set_current_storage_chunk(node_descp->get_current_storage_chunk());
node_descp->set_shared_segment(journal_store(node_descp->get_current_storage_chunk()).first_descriptor_shared());
}
}
будет принципиальная разница?
Доказать можете?
S>>Напрашивается вынесение внутреннего while в отдельную функцию или в локальную лямбду.
S>Лямбда будет выглядет также, только более уродливо и громоздко.
Попробуйте сперва.
S>А отдельная функция в том случае-тот самый реальный потенциальный источник багов, так как там транзакция к стораджу, и раскидывать логику по разным функиям-это гораздо более опасно, чем две неинициализированные локальные переменные.
Бла-бла-бла. Написали говнокод а теперь пытаетесь умными словами прикрыться.
Ваш фрагмент можно написать сильно понятнее и, вероятно, даже компактнее. Но вы слишком уверены в том, что умеете код писать, поэтому не можете посмотреть на собственное творение непредвзято.
Кстати, понять, почему вот это имеет смысл:
node_descp->set_current_storage_chunk(node_descp->get_current_storage_chunk());
тоже очень не просто.