He estado leyendo sobre la (des) conveniencia de tener en null
lugar de (por ejemplo) Maybe
. Después de leer este artículo , estoy convencido de que sería mucho mejor usarMaybe
(o algo similar). Sin embargo, me sorprende ver que todos los lenguajes de programación imperativos u orientados a objetos "bien conocidos" todavía se usan null
(lo que permite el acceso sin control a tipos que pueden representar un valor de "nada"), y eso Maybe
se usa principalmente en lenguajes de programación funcionales.
Como ejemplo, mira el siguiente código C #:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Algo huele mal aquí ... ¿Por qué deberíamos verificar si el argumento es nulo? ¿No deberíamos suponer que cada variable contiene una referencia a un objeto? Como puede ver, el problema es que, por definición, casi todas las variables pueden contener una referencia nula. ¿Qué pasaría si pudiéramos decidir qué variables son "anulables" y cuáles no? Eso nos ahorraría mucho esfuerzo al depurar y buscar una "NullReferenceException". Imagine que, por defecto, ningún tipo podría contener una referencia nula . En lugar de eso, declararía explícitamente que una variable puede contener una referencia nula , solo si realmente la necesita. Esa es la idea detrás de Quizás. Si tiene una función que en algunos casos falla (por ejemplo, división por cero), puede devolver unMaybe<int>
, declarando explícitamente que el resultado puede ser un int, ¡pero también nada! Esta es una razón para preferir Quizás en lugar de nulo. Si está interesado en más ejemplos, le sugiero que lea este artículo .
Los hechos son que, a pesar de las desventajas de hacer que la mayoría de los tipos sean anulables por defecto, la mayoría de los lenguajes de programación OO realmente lo hacen. Por eso me pregunto sobre:
- ¿Qué tipo de argumentos tendrías que implementar
null
en tu lenguaje de programación en lugar deMaybe
? ¿Hay alguna razón o es solo "equipaje histórico"?
Asegúrese de comprender la diferencia entre nulo y Quizás antes de responder esta pregunta.
null
existen o no su concepto (IIRC Haskell es un ejemplo de ello).
null
s en ellos durante mucho tiempo. No es fácil dejar eso.