Я читав про (не) зручність мати null
замість (наприклад) Maybe
. Прочитавши цю статтю , я переконаний, що було б набагато краще використовуватиMaybe
(або щось подібне). Однак я здивований, побачивши, що всі "відомі" імперативні або об'єктно-орієнтовані мови програмування все ще використовують null
(що дозволяє неперевірений доступ до типів, які можуть представляти значення "нічого"), і Maybe
це здебільшого використовується у функціональних мовах програмування.
Як приклад, подивіться наступний код C #:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Тут щось погано пахне ... Навіщо нам перевіряти, чи аргумент недійсний? Чи не слід вважати, що кожна змінна містить посилання на об'єкт? Як бачите, проблема полягає в тому, що за визначенням майже всі змінні можуть містити нульову посилання. Що робити, якщо ми могли вирішити, які змінні є "нульовими", а які ні? Це дозволить заощадити багато зусиль під час налагодження та пошуку "NullReferenceException". Уявіть, що за замовчуванням жоден тип не може містити нульової посилання . Замість цього ви б чітко заявили, що змінна може містити нульову посилання , лише якщо вона вам справді потрібна. Це ідея, можливо, Якщо у вас є функція, яка в деяких випадках не спрацьовує (наприклад, ділення на нуль), ви можете повернути aMaybe<int>
, прямо заявляючи, що результат може бути цілим, але також нічого! Це одна причина віддати перевагу Можливо, а не нульову. Якщо вас цікавить більше прикладів, то пропоную прочитати цю статтю .
Факти полягають у тому, що, незважаючи на недоліки змушення більшості типів за замовчуванням, більшість мов програмування OO насправді це роблять. Ось чому мені цікаво:
- Які аргументи ви б мали застосувати
null
замість своєї мови програмуванняMaybe
? Чи є взагалі причини чи це просто "історичний багаж"?
Будь ласка, переконайтеся, що ви розумієте різницю між null та Maybe, перш ніж відповісти на це запитання.
null
і його концепція не існує (IIRC Haskell є одним з таких прикладів).
null
в них давно. Це просто не можна просто скинути.