Должна ли быть создана логическая функция, противоположная существующей функции, так что ее цель понятна?

Исходя из этого вопроса . Считаете ли вы, что наилучшей практикой является создание функции, которая делает противоположную существующую функцию, просто чтобы дать ей другое имя.

Пример: если у вас уже есть bool In (строковый ввод, string [] set), который возвращает true, если набор массивов содержит ввод строки и false в противном случае, вы должны создать такую ​​функцию, как bool NotIn (ввод строки, строка [ ] set), который возвращает false, если строка находится в наборе или true в противном случае?

6 голосов | спросил Kevin 16 AMpSat, 16 Apr 2011 01:32:52 +040032Saturday 2011, 01:32:52

3 ответа


23

Нет, конечно, совсем не лучшая практика. Все языки, которые я когда-либо использовал, имеют оператор «не», поэтому используйте это. Это очень ясно, очень легко читать, и это экономит написание, по существу, дублирующих методов.

например. смысл и намерение кода ниже мне кажутся довольно ясными:

if (!In(...)) 
{...}

Пока я видел немного кода вроде этого:

if (NotIn(...))
{...}

Я думаю, "это, вероятно, противоположность In(), но если это было так, просто напишите !In() ". Итак, мне придется проверить документы или код: (

Очевидно, что писать такой метод не является синтаксически неправильным, это просто не idiomatic (в любом langauage, который я когда-либо использовал).

Изменить . Как отмечает Амир в комментариях, это то, что вполне может быть рассмотрено в стандартах кодирования, а также как назвать метод (или свойство), который возвращает логическое значение.

ответил Steve Haigh 16 AMpSat, 16 Apr 2011 01:38:49 +040038Saturday 2011, 01:38:49
8

В функциональных языках это может быть иногда удобным для предикатов, которые передаются другим функциям, т. е.

filter (`notElem` xs) ys

выглядит лучше, чем

filter ((!) . (`elem` xs)) ys

Этот пример Haskell демонстрирует, что правила синтаксиса могут заставить записать 4 дополнительных круглых скобки только для простого отрицания. Поскольку ясность уменьшает непропорциональность числа круглых скобок, хорошо иметь notElem.

ответил Ingo 16 AMpSat, 16 Apr 2011 03:04:20 +040004Saturday 2011, 03:04:20
0

Если у меня есть свойство, с которым я связываюсь, в проекте mvvm в WPF, я создаю явные версии свойств, которые являются прямыми противоположностями других. Хотя, я предпочитаю использовать довольно подробные символы того, что смысл, а не просто «Не» перед противоположным именем свойства. Я думаю, если вы говорите о функциях и чистом коде, я бы, вероятно, согласился, что вместо этого вы должны использовать правильные не операторы.

ответил jadusty 16 AMpSat, 16 Apr 2011 02:33:41 +040033Saturday 2011, 02:33:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132