Как указать, намеренно игнорируя возвращаемое значение

Ltk является довольно популярным, очень портативным, и обоснованно хорошо зарегистрированный через документы Tk. Установка на SBCL так же легка что:

(require :asdf-install)
(asdf-install:install :ltk)

существует также Ячейки-Gtk , который, как сообщают, довольно применим, но может иметь немного более крутую кривую обучения из-за ее уверенности в Ячейках.

РЕДАКТИРОВАНИЕ: Обратите внимание, что ASDF-УСТАНОВКА интегрируется это хорошо с SBCL [только 113]. Установка библиотек из других реализаций Lisp может оказаться более трудной. (Лично, я всегда устанавливаю свои библиотеки из SBCL и затем использую их от всех реализаций.) Извините за любой беспорядок это, возможно, вызвало.

15
задан BartoszKP 29 August 2018 в 14:19
поделиться

8 ответов

Я могу вспомнить только одну ситуацию, когда "возвращаемое значение" нельзя игнорировать в C #: когда произошла ошибка. Это должно быть обеспечено путем выдачи исключения, которое делает невозможным игнорирование.

В других случаях (или лучше: должно быть) полностью безопасным и совсем не вонючим игнорировать возвращаемые значения.

Я все еще не вижу смысла. Почему это должно улучшить код? Вы указываете намеренно игнорировать возвращаемое значение, не присваивая его переменной.

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

Я забыл кейс?

9
ответ дан 1 December 2019 в 01:17
поделиться

Компилятор Microsoft C # не генерирует предупреждение при игнорировании возврата. В этом нет необходимости, поскольку есть сборщик мусора, поэтому утечки памяти из-за игнорирования возвращаемых объектов не будет (если, конечно, они не являются IDisposable). Следовательно, нет необходимости явно «переопределять» компилятор.

РЕДАКТИРОВАТЬ: Кроме того, я считаю, что проблема «ремонтопригодности» больше похожа на проблему документации и практики именования. Я понимаю, что это всего лишь пример, но вы не ожидаете, что метод с именем SomeOperation вернет ReportId . Однако можно ожидать, что метод GetReportId вернет ReportId без большого количества побочных эффектов. Действительно, игнорирование возвращаемого значения метода GetReportId было бы довольно странным. Поэтому убедитесь, что вы правильно называете свои методы, и люди не будут сомневаться в последствиях вызовов ваших функций.

РЕДАКТИРОВАТЬ 2: В этом примере мьютексов я считаю, что правильное использование на самом деле было бы неверным. игнорирование возвращаемого значения. Даже если текущая реализация никогда не вернет false, я считаю хорошей практикой по-прежнему проверять возвращаемое значение на тот случай, если вы в конечном итоге будете использовать другую реализацию в будущем или они изменят поведение в будущей версии .NET Framework или что-то:

if (mutex.WaitOne())
{
   // Your code here
}
else
{
   // Optionally, some error handling here
}
6
ответ дан 1 December 2019 в 01:17
поделиться

Если вы хотите указать другим разработчикам и дать понять, что возвращаемое значение намеренно игнорируется, просто прокомментируйте его.

SomeMethod(); // return value ignored - $REASON
12
ответ дан 1 December 2019 в 01:17
поделиться

фиктивный объект объекта = JustDontCare ();

1
ответ дан 1 December 2019 в 01:17
поделиться

Нет стандартных соглашений, о которых я знаю.

Но я изо всех сил пытаюсь найти вескую причину для этого. Похоже, что SomeOperation () действительно должны быть двумя отдельными методами. У вас есть пример метода, который действительно должен вести себя именно так? Зачем методу возвращать результат, если он будет проигнорирован?

0
ответ дан 1 December 2019 в 01:17
поделиться

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

Тем не менее, компилятор C # выдаст ошибку в синтаксисе.

0
ответ дан 1 December 2019 в 01:17
поделиться

Я видел:

var notUsed = SomeOperation();

Хотя не очень люблю.

0
ответ дан 1 December 2019 в 01:17
поделиться

Соглашение в .Net таково: если вы не сохраняете или не используете возвращаемое значение, что означает, что вы игнорируете его неявно, явного соглашения нет, и API обычно спроектирован так, чтобы возвращаемые значения могли обычно игнорируются, за исключением логических значений, представляющих неудачу, успешное состояние.

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

-1
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

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