Я читав про (не) зручність мати 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в них давно. Це просто не можна просто скинути.