Я вначале тоже не комментировал простые и очевидные вещи. После Мартина также всецело стоял на позиции говорящего именования и прочего. Но… Судя по Вашему анализу моей никчемности, Вы достаточно опытный программист, раз можете давать такие суждения. И, конечно, в курсе, что над кодом работают несколько человек (иногда их называют командой).
Если абстрагироваться от простоты вещей и взглянуть на комментарий не как разъяснение чего-то, а как элемент метапрограммирования, то вы получаете мощный инструмент построения логики в отрыве от кода. Здесь комментарии стоят в качестве метаописания.
Я не претендую на глубоко продуманный комментариев, нет. И да, они лгут (о чем в частности предупреждал Мартин, которого по мнению andreycha на меня нет). Я пытался показать идею. Не надо читать код, чтобы понять его суть. Код может переписываться так, что внутри будут использованы полиморфные вызовы, табличные методы, запутанная иерархия, но метаописание должно оставаться легким. Поэтому комменты здесь смотрятся нелепо, но когда этот метод перепишется десяток раз, Вы возопите, что ничерта не понятно.
Принцип «одна точка входа одна точка выхода». Ты всегда знаешь, где выйдешь из метода. Далее, переменная result служит одновременно и условием цикла и возвращаемым значением. Она контролирует весь метод — это семантически правильно.
Насчет последнего утверждения и прерываний цикла — цитата из Макконнелла выше, если «какому-то мне» не верят, может старичек Стив что напомнит…
Я упомянул не «египетские» скобки, и не говорил про «прямые» скобки. Я сказал про Zend-way — бессмысленная и беспощадная смесь двух предыдущих (тело метода — египетские, все остальное — прямые).
Use of break eliminates the possibility of treating a loop as a black box. Limiting yourself to only one statement to control a loop’s exit condition is a powerful way to simplify your loops. Using a break forces the person reading your code to look inside the loop for an understanding of the loop control. That makes the loop more difficult to understand. Use break only after you have considered the alternatives. To paraphrase the nineteenth-century Danish philosopher Søren Kierkegaard, you don’t know with certainty whether continue and break are virtuous or evil constructs. Some computer scientists argue that they are a legitimate technique in structured programming; some argue that they are not. Because you don’t know in general whether continue and break are right or wrong, use them, but only with a fear you might be wrong. It really is a simple proposition: If you can’t defend a break or a continue, don’t use it.
С самого начала, с первого же кода увидел следующее. Нет комментариев. Какой бы человек не был умный — его код будут читать другие люди. Пусть даже и код для собеседования, но наличие комментариев будет только плюсом. Два — это тонкий момент — return из цикла, как и continue, а иногда и break, крайне нежелательны. Три — Zend-way расстановки скобок несколько пугает. Предложу свой вариант:
bool are_unique_characters(const std::string& str)
{
// assume all chars are unique by default
bool result = true;
// flags for found chars, where index is char's ASCII code
std::vector<bool> char_set(256, false);
// iterate through string and set flags for found chars to true
for (int i = 0; i < str.size() && result; ++i)
{
// get ASCII code for i-th char
int val = str.at(i);
// get flag at val-th index
result = !char_set[val];
// set flag at val-th index to true
char_set[val] = true;
}
return result;
}
Жаль, что не в Ростове (подставьте Ваш город), т.к. куда не глянь, то если интересная конференция — дефолт сити или Питер, Smth Developer Day(s) — дефолт сити или Питер, семинар — ну, вы поняли…
С первых строк почувствовал знакомый стиль изложения… Ну точно, Джоэл! Только вот хорошо бы было упомянуть, что это глава из книги Джоэл. И снова о программировании, а именно — Часть II. Советы будущим программистам, Глава 8. Опасности обучения на Java.
Не завелось…
Microsoft Windows XP [Version 5.1.2600] SP3 ---------------------------
16 bit MS-DOS Subsystem
---------------------------
C:\DOCUME~1\SZELEN~1\Desktop\k29.com
The NTVDM CPU has encountered an illegal instruction.
CS:c000 IP:dede OP:ff ff ff ff ff Choose 'Close' to terminate the application.
---------------------------
Close Ignore
---------------------------
Планируется ли выпуск флагманской модели в стиле Sensation, но с QWERTY клавиатурой, как в Desire Z? Если да, то, пожалуйста, поделитесь примерными сроками анонса такой модели.
Это подход, основанный на марковских цепях. Он подробно описан в фундаментальном, по моему мнению, труде Зарипова Р. Х. в его книге «Кибернетика и музыка», 1971 года, по-моему.
Господа, отвечу тут на вопрос про результат. На следующей неделе я закончу топик про практическое применение. Сразу оговорюсь, что это, как бы сферическая коллаборация в вакууме. Будут рассморены 2 алгоритма: генерация марковскими цепями и синтез на основе порождающих грамматик. Первый алгоритм компетентен только в вопросах звуковысоты, второй — в вопросах ритма.
Надеюсь, к этому времени я найду свою дипломную работу, а именно программу, чтобы можно было пощупать как это работает. Ссылка на программу будет так же в следующем топике. Спасибо за интерес к теме, а пока я ушел наслаждаться отпуском.
Если абстрагироваться от простоты вещей и взглянуть на комментарий не как разъяснение чего-то, а как элемент метапрограммирования, то вы получаете мощный инструмент построения логики в отрыве от кода. Здесь комментарии стоят в качестве метаописания.
Я не претендую на глубоко продуманный комментариев, нет. И да, они лгут (о чем в частности предупреждал Мартин, которого по мнению andreycha на меня нет). Я пытался показать идею. Не надо читать код, чтобы понять его суть. Код может переписываться так, что внутри будут использованы полиморфные вызовы, табличные методы, запутанная иерархия, но метаописание должно оставаться легким. Поэтому комменты здесь смотрятся нелепо, но когда этот метод перепишется десяток раз, Вы возопите, что ничерта не понятно.
Насчет последнего утверждения и прерываний цикла — цитата из Макконнелла выше, если «какому-то мне» не верят, может старичек Стив что напомнит…
Я упомянул не «египетские» скобки, и не говорил про «прямые» скобки. Я сказал про Zend-way — бессмысленная и беспощадная смесь двух предыдущих (тело метода — египетские, все остальное — прямые).
Microsoft Windows XP [Version 5.1.2600] SP3
---------------------------
16 bit MS-DOS Subsystem
---------------------------
C:\DOCUME~1\SZELEN~1\Desktop\k29.com
The NTVDM CPU has encountered an illegal instruction.
CS:c000 IP:dede OP:ff ff ff ff ff Choose 'Close' to terminate the application.
---------------------------
Close Ignore
---------------------------
Про вариант с 4 пробелами:
A = Aaaaaaaaaaaa &&
Bbbbbbbbb;
Но, по-моему, читабельность, в данном случае, рассматривается еще и на уровне операций:
A = Aaaaaaaaaaaa
&& Bbbbbbbbb
&& Ccccccccc;
Надеюсь, к этому времени я найду свою дипломную работу, а именно программу, чтобы можно было пощупать как это работает. Ссылка на программу будет так же в следующем топике. Спасибо за интерес к теме, а пока я ушел наслаждаться отпуском.