Не, это просто идиотское суеверие такое, боятся поставить = и не заметить. Транслятор обычно выдает "операция без внешних эффецтов" в таком случае, но старообрядцам этого мало. Хотят чтобы сразу ошибка "присвоение к константе".
Magic number? IN MY PROGRAM??? Ну и в идеале, канешн, это предикат. Т.е if ( isQueueFull(myQueue))... и boolean isQueueFull(queue) { return queue.length >= QUEUE_LENGTH; }
В языке-то в каком? Первый вариант применяют труъ программеры на старом хардкорном Си (который ещё K&R), дабы избежать ошибок вида "if(a=5) {do_something();}" Правда, в именно в твоем случае (сравнение вычисляемого с константой) компилятор, скорее всего, скажет что-то вроде "lvalue required". Ну еще вещественные числа так сравнивать нельзя, надо так "if(abs(somefunc() - 10.0) < epsilon). В большинстве остальных случаев, IMHO, второй вариант самый наглядный.
Если подумать... Если приходится сравнивать результат функции с _одной_ константой, то что-то спроектировано не так.
Так что в норме либо case по всему набору возможностей, либо pattern match, что по сути одно и то же.
Нет, разумеется, бывают отдельные случаи, когда задача такова, или (чаще) когда язык настолько беден, что приходится иметь константы, обозначающие другие варианты алгебраического типа (типа 0 в качестве N/A).
1. считается теоретически лучше, т.к. не присвоишь, но на присвоение уже вроде все компиляторы умеют ругаться, а от такого варианта меня выворачивает 2. вобщем то мой вариант, но предпочитают не иметь неименованных констант 3. ну это вообще ява какая-то 4. собстно так и ответил
Пользователь mklochkov сослался на вашу запись в записи «О Си и массивах — через год (http://mklochkov.livejournal.com/79149.html)» в контексте: [...] Питера ван Линдена, который и натолкнул меня на идею, как это сделать. Еще своим комментарием [...]
no subject
Date: 2013-03-18 08:04 am (UTC)no subject
Date: 2013-03-18 08:15 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:11 am (UTC)no subject
Date: 2013-03-18 08:15 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:19 am (UTC)if (x()==10)
Для любых объектов (в том числе для строк):
if ( "Text".equals(x()) )
Причина сугубо практическая - лень делать проверку на null.
no subject
Date: 2013-03-18 08:24 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:21 am (UTC)no subject
Date: 2013-03-18 08:23 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:26 am (UTC)no subject
Date: 2013-03-18 08:02 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:27 am (UTC)Ну и в идеале, канешн, это предикат.
Т.е
if ( isQueueFull(myQueue))...
и
boolean isQueueFull(queue)
{
return queue.length >= QUEUE_LENGTH;
}
no subject
Date: 2013-03-18 08:57 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 08:27 am (UTC)Have you ever changed value of four?
... Intentionally?
... In the language, other than Fortran?
no subject
Date: 2013-03-18 08:28 am (UTC)и еще через вызов удаленного soap метода
no subject
Date: 2013-03-18 08:45 am (UTC)Первый вариант применяют труъ программеры на старом хардкорном Си (который ещё K&R), дабы избежать ошибок вида "if(a=5) {do_something();}"
Правда, в именно в твоем случае (сравнение вычисляемого с константой) компилятор, скорее всего, скажет что-то вроде "lvalue required".
Ну еще вещественные числа так сравнивать нельзя, надо так "if(abs(somefunc() - 10.0) < epsilon).
В большинстве остальных случаев, IMHO, второй вариант самый наглядный.
no subject
Date: 2013-03-18 08:51 am (UTC)K&R под руками нет, а gcc отлично справляется ;)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 09:04 am (UTC)Так что в норме либо case по всему набору возможностей, либо pattern match, что по сути одно и то же.
Нет, разумеется, бывают отдельные случаи, когда задача такова, или (чаще) когда язык настолько беден, что приходится иметь константы, обозначающие другие варианты алгебраического типа (типа 0 в качестве N/A).
no subject
Date: 2013-03-18 09:24 am (UTC)Вариант "10 == value" применяется ТОЛЬКО потому, что в случае типичной опечатки, которая превращает его в "10 = value", компилятор сообщает об ошибке.
Всё.
no subject
Date: 2013-03-18 09:25 am (UTC)(no subject)
From:no subject
Date: 2013-03-18 09:27 am (UTC)no subject
Date: 2013-03-18 09:28 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 09:43 am (UTC)А так, бывет сравнение и в таком виде:
try
10 = SomeFunc(),
ok
catch
_:_ -> error
end
no subject
Date: 2013-03-18 10:34 am (UTC)Привык уж так. Даже, бывает, в жавском коде так пишу не задумываясь.
no subject
Date: 2013-03-18 11:11 am (UTC)1. считается теоретически лучше, т.к. не присвоишь, но на присвоение уже вроде все компиляторы умеют ругаться, а от такого варианта меня выворачивает
2. вобщем то мой вариант, но предпочитают не иметь неименованных констант
3. ну это вообще ява какая-то
4. собстно так и ответил
no subject
Date: 2013-03-18 12:09 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-18 02:08 pm (UTC)no subject
Date: 2013-03-18 02:59 pm (UTC)no subject
Date: 2013-03-18 04:46 pm (UTC)no subject
Date: 2013-03-18 05:14 pm (UTC)const A_NUMBER_I_LIKE_BEST = 10;
/* какой-то код */
if( someFunc() == A_NUMBER_I_LIKE_BEST )
Старшие товарищи приучили меня, что писать число в коде цифрами некошерно.
no subject
Date: 2013-03-19 07:56 am (UTC)no subject
Date: 2013-03-19 12:09 am (UTC)О Си и массивах — через год
Date: 2013-04-05 08:45 pm (UTC)