Вся причина для опций заключается в предотвращении сбоев во время выполнения, вызванных ударом переменной, назначенной nil/null/none. Следовательно, переменные не могут быть nil; вместо этого они могут быть завернуты в необязательный тип, который представляет их как Some или None, и разворачивается для получения определенного содержимого Some или nil.
Но если вы разворачиваете их повсюду с помощью !
или с помощью неявно освобожденных опций, вы просто вводите эту возможность, так как вы несовершенный кодер, из-за сбоев во время выполнения. Если вы используете if let
, чтобы безопасно разворачивать их, вы избегаете сбоев, но вы застреваете внутри области действия оператора if let
для работы со значением внутри Some, и вам все равно придется обрабатывать потенциальный случай nil. Если вы используете? для временного разворачивания вызова метода, он будет завершен после завершения, введя беспорядочную возможность многоуровневой дополнительной упаковки.
Итак: Мне кажется, что нужно сделать это, избегая опций, кроме случаев, когда это необходимо (например, при вызове методов инфраструктуры, которые возвращают их). Но если я не использую опции, это означает, что мои ссылки на объекты должны быть не равными нулю, и я не могу понять, как обрабатывать случаи, когда по той или иной причине не должно быть или нет, значение, присвоенное объектной ссылке.
Мой вопрос: как мне избежать необходимости в нуле? Похоже, для этого требуется другой подход к программированию. (Или я должен использовать только опции, и если это то, что я делаю, как это лучше, чем просто иметь нулевые назначения для ссылок на объекты, например, на других языках?)
Я знаю, что это потенциально субъективный вопрос, но где еще я должен его спрашивать? Я не пытаюсь троллить или возбуждать дебаты, мне бы очень хотелось узнать, какой правильный подход, поскольку я пишу более быстрый код.