- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
bool Channel::applyPreprocessorSettings()
{
if (captureDeviceID_.empty() || !isSafeToChangeSettingsNow())
CHANNEL_LOG("deferring applyPreprocessorSettings()");
needApplyPreprocessorSettings_ = true;
return false;
// ... (куча кода)
return true;
}
bormand 09.04.2013 20:23 # +1
Kirinyale 09.04.2013 20:26 # 0
VseGovnoOdinYaKrut 09.04.2013 21:15 # 0
3.14159265 09.04.2013 21:18 # +1
Переходи на sql.
bormand 09.04.2013 21:21 # +2
3.14159265 09.04.2013 21:28 # +1
guest 09.04.2013 22:14 # 0
Kirinyale 09.04.2013 22:14 # −2
LispGovno 10.04.2013 21:38 # 0
А он там есть?
bormand 10.04.2013 21:51 # +1
anonimb84a2f6fd141 22.04.2013 08:01 # 0
bormand 09.04.2013 21:20 # +1
Kirinyale 09.04.2013 22:17 # 0
На чуть посвежевшую голову всерьёз призадумался: почему в данном конкретном случае компилятор не выдал варнинг "unreachable code"? Придётся завтра проверять, что там лиды за warning level поставили...
roman-kashitsyn 09.04.2013 23:11 # +1
Kirinyale 09.04.2013 23:12 # 0
В питоне тоже? :)
Я-то тоже к такой паранойе привык было, но постоянные переключения начинают мешать. Уже и для ифов скобки забываю иногда, но это хотя бы не компилируется.
roman-kashitsyn 09.04.2013 23:17 # 0
Kirinyale 09.04.2013 23:19 # 0
roman-kashitsyn 10.04.2013 00:18 # 0
blackhearted 10.04.2013 15:40 # 0
Kirinyale 10.04.2013 15:43 # +1
TarasB 10.04.2013 16:19 # +2
LispGovno 09.04.2013 21:35 # −3
Почему?
LispGovno 09.04.2013 21:36 # −1
wvxvw 10.04.2013 13:52 # −5
Проблем изза того, что return всегда в последней строке никогда не было.
blackhearted 10.04.2013 15:41 # +3
проблема не в ретурне.
bormand 10.04.2013 15:46 # 0
wvxvw 10.04.2013 15:55 # 0
roman-kashitsyn 10.04.2013 15:57 # 0
wvxvw 10.04.2013 15:59 # 0
roman-kashitsyn 10.04.2013 16:04 # 0
bormand 10.04.2013 16:17 # +1
А IDE "помогла" ему, и не отменила лишние отступы в неподобающих местах, поэтому он не заметил ошибку.
Kirinyale 10.04.2013 16:28 # 0
wvxvw 10.04.2013 16:30 # 0
Kirinyale 10.04.2013 16:36 # 0
Чего ради мне в этом случае писать else после ветки, заканчивающейся return? Для красоты? Для того, чтобы добавить лишний отступ перед всем, что идёт дальше?
wvxvw 10.04.2013 16:40 # 0
roman-kashitsyn 10.04.2013 16:42 # +2
Мой пример - лишь иллюстрация того, что правило "одна точка выхода из функции" в общем случае никак не спасает от ошибки, на которую попался автор.
Kirinyale 10.04.2013 16:45 # 0
А, ну так к его посту и надо было ответ писать, чтоб не путаться.
Определяться мне пока не с чем. Я только понять пытаюсь, на чём основана эта Ваша странная идея, что return нужно ставить только в конце функции, а всё остальное - от лукавого.
roman-kashitsyn 10.04.2013 16:51 # 0
Это же целое идиологическое направление, взявшее начало от Дейкстры.
У функциональщиков также принято возвращать значение последнего выражения, но досрочный ретурн сымитировать таки можно через монаду Cont.
wvxvw 10.04.2013 16:56 # 0
- когда я читаю код, то расстояние до левого края мне сообщает о том, что этот код выполняется всегда, безусловно. Это простое правило, которому просто следовать интуитивно (сокращает время потраченное на чтение).
- отлаживать функцию в которой нет преждевременных окончаний - проще, т.как можно просто на предпоследней строчке вызвать отладчик, не вдаваясь в подробности / не обвешивая фунцию вызовами отладчика по периметру.
- в языках, где существуют всякие вариации синтаксиса, такого типа, как в примере выше это помогает избежать подобные ситуации, т.как любой код, который бы должен был выполнятся по условию будет механически помещен за гарда этого условия (либо if, либо else).
- написание покрытия тестами становится немного проще (но не существенно).
Если ради этого мне нужно пожертвовать одной "ступенькой" - мне это видится вполне приемлимой платой. Наверное, это меньше понравится людям, которые пишут по 8 пробелов в "ступеньке"... но я к ним не отношусь.
Lure Of Chaos 10.04.2013 17:53 # +2
Kirinyale 10.04.2013 19:29 # +4
roman-kashitsyn 10.04.2013 20:10 # +1
Kirinyale 11.04.2013 12:51 # 0
Вообще, смотря для чего и в каких масштабах. По удобству работы со стандартными контейнерами, безусловно, питон убирает плюсы одной левой. Но повсеместно-принудительная "свободная" типизация и прочие прелести вроде автосоздания переменных присваиванием очень напрягают, когда 99% ошибок и опечаток, которым C++ не дал бы даже скомпилироваться, приходится ловить в рантайме, несмотря на всю PyCharm'овскую подсветку (а иногда и "благодаря" ей).
Особенно мне это нравится при работе с серверной частью: написал большой кусок кода (или порефакторил существующий), залил на сервер, запустил. Глянул в логи, нашёл трейсбек, поправил. Остановил сервер, перезалил, перезапустил. Глянул в логи, нашёл следующий трейсбек. Поправил, остановил, перезалил, перезапустил... и так пару часиков. :)
roman-kashitsyn 11.04.2013 13:21 # +3
scriptin 11.04.2013 18:34 # 0
LispGovno 10.04.2013 21:38 # 0
Kirinyale 11.04.2013 12:45 # +1
Питон здесь - пристройка к движку, на которой нужно писать практически всю логику (в том числе клиент-серверную). В рамках моей текущей задачи C++ нужен только для непосредственной работы с одним сторонним SDK.
blackhearted 12.04.2013 16:08 # −1
Оба работаем руками.
anonimb84a2f6fd141 22.04.2013 08:03 # 0
bormand 22.04.2013 08:54 # 0
Питон без юнит-тестов юзать нельзя. Вообще.
anonimb84a2f6fd141 23.04.2013 02:54 # 0