Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.115.179] |
|
Страницы: (7) « Первая ... 3 4 [5] 6 7 все ( Перейти к последнему сообщению ) |
Сообщ.
#61
,
|
|
|
Цитата Jin X @ Если под ленивой ты подразумеваешь проверку одного условия из 2-х (если оно true для ||), то отчего ж && не ленивая (при первом false)? && тоже ленивая уж. Имеется ввиду, что || в моём предложении ты можешь заменить на &&, а | на &. |
Сообщ.
#62
,
|
|
|
Вот, блин!
В JS: 5&&1 = 1, а 1&&5 = 5 5||0 = 5 и 0||5 = 5 (почему одинаково - понятно, но почему не true/false?) Чё за бред? p.s. В сях всё нормально работает: везде выдаёт 1 или true (в т.ч. для 2&&1 и 1&&~1, что ожидаемо). Добавлено Цитата OpenGL @ Что??? Имеется ввиду, что || в моём предложении ты можешь заменить на &&, а | на &. Добавлено OpenGL, ты имеешь в виду, что && и || ленивые в отличие от & и | ? А разве основная ценность в этой ленивости? И это достаточная причина, чтобы не делать ^^ ? Ну реально бывает (редко, но бывает), что нужно сделать (x ^^ y). Можно, конечно, написать (!x != !y), но это тоже не вот прям офигеть как читаемо |
Сообщ.
#63
,
|
|
|
Ну это не серьёзно. Типы данных разные, и && и &, равно как и || и |, определены для разных типов, для которых есть взаимные касты, тогда как != одна на все типы, и кастов не требуется. Ты же не думаешь, что за типами следить не надо? А то я как-то видал в коде if(a != true), было весело писать багрепорты.
|
Сообщ.
#64
,
|
|
|
Цитата Qraizer @ Надо, но всегда ли есть смысл писать if (x != 0), когда можно написать просто if (x) ?Ты же не думаешь, что за типами следить не надо? А в случае с xor как-то тоже бредово выглядит if ((x && !y) || (!x && y)) и аналогично if ((x!=0 && y==0) || (x==0 && y!=0)). Как ты предлагаешь реализовать xor, чтобы получилось красиво? Добавлено Цитата Jin X @ Или:тоже бредово выглядит bool boolX = x, boolY = y; if (boolX != boolY) {...} if ((bool)x != (bool)y) Добавлено В JS соответственно: var boolX=!!x, boolY=!!y; if (boolX != boolY) {...} |
Сообщ.
#65
,
|
|
|
Цитата Jin X @ OpenGL, ты имеешь в виду, что && и || ленивые в отличие от & и | ? Да. Добавлено Цитата Jin X @ А разве основная ценность в этой ленивости? И это достаточная причина, чтобы не делать ^^ ? Имхо, да. Из-за ленивости ты сможешь написать что-то наподобие if(index < a.len() && a[index] < 42), и замена && на & тут не прокатит. ^^ же ровно с тем же успехом в большинстве случаев заменяется на ^. Цитата Jin X @ Ну реально бывает (редко, но бывает), что нужно сделать (x ^^ y). Когда x и y не булевские, и просто конвертятся неявным кастом? Я в этом случае просто сам сравниваю с нулём. Т.е. как-то if ((x != 0) ^ (y != 0)) пишу. |
Сообщ.
#66
,
|
|
|
Периодически встречаются конструкции вида if x % 1 == 0 или if not 1 % 1 — проверка на целое (python)
Или n = ~~(n/5) — деление нацело (JS) Прикольно, конечно, но в "чистоте" такого кода у меня сомнения... |
Сообщ.
#67
,
|
|
|
Цитата Jin X @ Надо, но всегда ли есть смысл писать if (x != 0), когда можно написать просто if (x) ? Почему нет? В языках без неявного приведения к bool писать != 0 не напрягает совершенно. |
Сообщ.
#68
,
|
|
|
Цитата Jin X @ Вот, блин! В JS: 5&&1 = 1, а 1&&5 = 5 5||0 = 5 и 0||5 = 5 (почему одинаково - понятно, но почему не true/false?) Чё за бред? Я же написал даже, что есть языки, где операнды возвращают значение, а не булев результат: Чистота кода VS оптимизация (сообщение #3766081) пункт номер 1 |
Сообщ.
#69
,
|
|
|
Цитата OpenGL @ Вариант, конечно (тогда можно использовать != – так понятнее).Т.е. как-то if ((x != 0) ^ (y != 0)) пишу. Но это точно лучше, чем if (x ^^ y) (если бы он был)? Добавлено Цитата Serafim @ Сенькс. В Java так же? Я же написал даже, что есть языки, где операнды возвращают значение, а не булев результат |
Сообщ.
#70
,
|
|
|
Цитата Jin X @ Это точно лучше, чем if (x ^^ y) (если бы он был)? Зависит от того, как ты относишься к неявным кастам чисел к bool Я вот за пределами олимпиад стараюсь их избегать, и поэтому даже if (a && b) у меня выглядит как if (a != 0 && b != 0) |
Сообщ.
#71
,
|
|
|
#define XOR(a, b) (bool(a) != bool(b)) . . . if (XOR(x, y)) {...} |
Сообщ.
#72
,
|
|
|
Цитата Jin X @ Сенькс. В Java так же? Я не помню, кажется там каст к булеву. Тут тебе Астарот поможет. А в Ruby и JS - 146% возврат значения. Плюс, в рубях и котлине сами операторы могут возвращать значение, типа: return if (errValue || errValue2) { throw Exception("Whoops!") } else { print("OK") do(); true } |
Сообщ.
#73
,
|
|
|
Цитата Serafim @ C++Плюс, в рубях и котлине сами операторы могут возвращать значение int func(int val) { return val ? (printf("%d ", val), 2) : -1; } int main() { int x; scanf("%d", &x); printf("%d\n", func(x)); return 0; } Добавлено Или так int func(int val) { return val ? ({int x = val*5; printf("%d ", x); 2;}) : -1; } int main() { int x; scanf("%d", &x); printf("%d\n", func(x)); return 0; } |
Сообщ.
#74
,
|
|
|
ммм. А как тема "Чистота кода VS оптимизация" превратилась в соревнование кто по-уродливее код написать может?
|
Сообщ.
#75
,
|
|
|
Это значит, что любой оператор (хотя в котлине вроде только if):
verifyItems = (...args) => (i or throw Error "asd" for i of args).length Применение для каждого элемента args функции, которая в случае элемента, который равен false вернёт ошибку, в остальных случаях значение аккумулируется и от него берётся length, т.е. количество элементов в результате (этот ваш незамысловатый i++ в if условии). А вот даже можно собрать это всё |