Re[28]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 04.06.19 19:24
Оценка: +2
Здравствуйте, 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());

тоже очень не просто.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.