Нулевое значение для Point3d

Автор Тема: Нулевое значение для Point3d  (Прочитано 13917 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Нулевое значение для Point3d
« Ответ #15 : 15-02-2017, 13:45:21 »
Тоже вариант, но это не универсальное решение. У целочисленных типов, например, нет значения NaN.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Нулевое значение для Point3d
« Ответ #16 : 15-02-2017, 14:13:09 »
Для обеих структур-точек (Point2d и Point3d) - универсальное :) И есть маленькое преимущество по ставнению с Nullable  - я не создаю новый тип данных и значит не надо писать ".Value" в каждом вызове каждой функции API. Хотя с другой стороны больше шанс забыть проверку на NaN... Так что на вкус и цвет...
Идеально было б, если у этих структур изначально был IsNull как у ObjectId и всех остальных объектов... эххх

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Нулевое значение для Point3d
« Ответ #17 : 15-02-2017, 16:25:31 »
И есть маленькое преимущество по ставнению с Nullable  - я не создаю новый тип данных и значит не надо писать ".Value"
Ваше решение конечно "креативное", но с моей точки зрения "опасное". Про опциональные типы (и как их подвид Nullable) - изначальная логика их в том, что передавать их надо в "первозданном" виде до "развертывания", а когда необходимо сделать проверку на наличие значения, там практически в 100% случаев идет ветвление программы (типа есть у нас значение или нет). Просто в функциональных языках (откуда собственно и "растут ноги" данного механизма), на данный тип всегда есть шаблон проверки, а .Value конечно применять не надо (это просто C# нормально с ними работать не умеет - формально вроде типы такие есть, а обертки для них не предусмотрено концепцией).
Пример как реализуется такое на F#:
Код - F# [Выбрать]
  1.  ptOpt|>function //ptOpt - имя опционального значения
  2.    |Some(pt)-> /// здесь идет ветвь программы с объявленным именем pt содержащие точку (тип выводится автоматом)
  3.    |None-> //здесь ветвь при отсутствии значения
  4.  

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Нулевое значение для Point3d
« Ответ #18 : 15-02-2017, 16:44:23 »
Простите убогого - ничего не понял :) Теоретик программирования я никакой, я инженер.
Ветвление программы конечно нужно - я про это уже написал - есть шанс забыть проверку на NaN. Абсолютно точно так же можно лохануться, забыв проверку на null, но там необходимость извлечения базового Value из Nullable типа может сработать как напоминалка.
Кстати, в этой теме писали, что на бейсике можно структуре Nothing присвоить. Так что получается мой коммент только про C#

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Нулевое значение для Point3d
« Ответ #19 : 15-02-2017, 19:04:57 »
Ну если простыми словами - на уровне компилятора объединяются в одно три действия проверка значения, выделение его "составляющей" (если она есть) и переход на соответствующую ветку выполнения.