tobotras: (Default)
tobotras ([personal profile] tobotras) wrote2013-03-18 11:57 am

Стилистическое

Глядя в код некоторых коллег увидел тут глубокое экзистенциальное различие между нами. Акакувас?

[Poll #1902710]

[identity profile] tarkhil.livejournal.com 2013-03-18 08:04 am (UTC)(link)
someObject.CalculateSampleValue.equalTo(new IntegerConstant("ten")) ;)

[identity profile] tnt23.livejournal.com 2013-03-18 08:11 am (UTC)(link)
Очень мешает, что это радиобаттоны, а не чекбоксы!

[identity profile] deadmustdie.livejournal.com 2013-03-18 08:19 am (UTC)(link)
Для целых:
if (x()==10)

Для любых объектов (в том числе для строк):
if ( "Text".equals(x()) )

Причина сугубо практическая - лень делать проверку на null.

[identity profile] dzz.livejournal.com 2013-03-18 08:21 am (UTC)(link)
Вообще-то, в языках со слабой типизацией == не всегда означает ожидаемое сравнение, так что иногда я за if(IsEqual(SomeFunc(), 10))

[identity profile] tolok.livejournal.com 2013-03-18 08:26 am (UTC)(link)
10 == someFunc() это, наверное, из sql выросло, что ли

[identity profile] rmrfchik.livejournal.com 2013-03-18 08:27 am (UTC)(link)
Magic number? IN MY PROGRAM???
Ну и в идеале, канешн, это предикат.
Т.е
if ( isQueueFull(myQueue))...
и
boolean isQueueFull(queue)
{
return queue.length >= QUEUE_LENGTH;
}
vitus_wagner: My photo 2005 (white)

[personal profile] vitus_wagner 2013-03-18 08:27 am (UTC)(link)
Как было написано в хакерс тесте:
Have you ever changed value of four?
... Intentionally?
... In the language, other than Fortran?

[identity profile] http://users.livejournal.com/_slw/ 2013-03-18 08:28 am (UTC)(link)
через темплэйты надо.
и еще через вызов удаленного soap метода

[identity profile] mklochkov.livejournal.com 2013-03-18 08:45 am (UTC)(link)
В языке-то в каком?
Первый вариант применяют труъ программеры на старом хардкорном Си (который ещё K&R), дабы избежать ошибок вида "if(a=5) {do_something();}"
Правда, в именно в твоем случае (сравнение вычисляемого с константой) компилятор, скорее всего, скажет что-то вроде "lvalue required".
Ну еще вещественные числа так сравнивать нельзя, надо так "if(abs(somefunc() - 10.0) < epsilon).
В большинстве остальных случаев, IMHO, второй вариант самый наглядный.

[identity profile] besm6.livejournal.com 2013-03-18 09:04 am (UTC)(link)
Если подумать... Если приходится сравнивать результат функции с _одной_ константой, то что-то спроектировано не так.

Так что в норме либо case по всему набору возможностей, либо pattern match, что по сути одно и то же.

Нет, разумеется, бывают отдельные случаи, когда задача такова, или (чаще) когда язык настолько беден, что приходится иметь константы, обозначающие другие варианты алгебраического типа (типа 0 в качестве N/A).

[identity profile] dz.livejournal.com 2013-03-18 09:24 am (UTC)(link)
Ужас, мальчики, как всё хуёво тут у вас. Это же общее место, уровень плинтуса.

Вариант "10 == value" применяется ТОЛЬКО потому, что в случае типичной опечатки, которая превращает его в "10 = value", компилятор сообщает об ошибке.

Всё.

[identity profile] joyfolk.livejournal.com 2013-03-18 09:27 am (UTC)(link)
Если именно ==, то второй вариант. Если equals - обычно первый.

[identity profile] ufm.livejournal.com 2013-03-18 09:43 am (UTC)(link)
В "чистом Це" - первый вариант для единообразия.

А так, бывет сравнение и в таком виде:
try
10 = SomeFunc(),
ok
catch
_:_ -> error
end

[identity profile] crimcat.livejournal.com 2013-03-18 10:34 am (UTC)(link)
const == f()
Привык уж так. Даже, бывает, в жавском коде так пишу не задумываясь.

[identity profile] dimas.livejournal.com 2013-03-18 11:11 am (UTC)(link)
ЭОС :)

1. считается теоретически лучше, т.к. не присвоишь, но на присвоение уже вроде все компиляторы умеют ругаться, а от такого варианта меня выворачивает
2. вобщем то мой вариант, но предпочитают не иметь неименованных констант
3. ну это вообще ява какая-то
4. собстно так и ответил

[identity profile] dbrane.livejournal.com 2013-03-18 02:08 pm (UTC)(link)
if (blah === 10), конечно :-).

[identity profile] evolver.livejournal.com 2013-03-18 02:59 pm (UTC)(link)
const uint GOOD_SCORE = 10;

bool hasGoodScore() {
  return (someFunc() == GOOD_SCORE);
}

if (hasGoodScore()) ...

[identity profile] dmzlj.livejournal.com 2013-03-18 04:46 pm (UTC)(link)
естественнее второе, но если пишу на си, стараюсь следовать первому, если вспоминаю. конечно, после языков с нормальной типизацией это смешно

[identity profile] aka-author.livejournal.com 2013-03-18 05:14 pm (UTC)(link)

const A_NUMBER_I_LIKE_BEST = 10;

/* какой-то код */

if( someFunc() == A_NUMBER_I_LIKE_BEST )

Старшие товарищи приучили меня, что писать число в коде цифрами некошерно.

[identity profile] ignik.livejournal.com 2013-03-19 12:09 am (UTC)(link)
Вааще-та тут всё зависит что такое 10. Обычно никаких 10 нет. Поэтому
switch ( SomeFunc() ) {
  case 10: 
}

Edited 2013-03-19 00:10 (UTC)

О Си и массивах — через год

[identity profile] livejournal.livejournal.com 2013-04-05 08:45 pm (UTC)(link)
Пользователь [livejournal.com profile] mklochkov сослался на вашу запись в записи «О Си и массивах — через год (http://mklochkov.livejournal.com/79149.html)» в контексте: [...] Питера ван Линдена, который и натолкнул меня на идею, как это сделать. Еще своим комментарием [...]