null == "" is true?

Antonio antonio at abrevia.net
Tue Jul 19 18:05:34 UTC 2022


On Tuesday, 19 July 2022 at 17:05:27 UTC, Kagamin wrote:
> Also what's the difference between null and empty phone number?


In a relational database, `NULL` is not the same that `""`... and 
`NULL` is not the same that `0`.  Are semantically different and 
there are database invariants (like foreign keys) based on it.   
Trying to "mix" this concepts in a database is a mistake.

When you treat with Domain Models, you try to represent this 
semantics in all levels of your software... including APIs

If your address has not a reference to the city... then there is 
a `city_code` field with `NULL` value in your database and the 
Address model object has a city property representing this Null 
value with the tools that language/library offers to you:  
`Nullable!City` or `Sumtype!(Null, City)` or `Optional<City>` or 
...).

`Null` is then a valid value state that has nothing related to 
*`null` pointers*... to avoid confusion, I talk about `Null` 
instead `null`.

I, personally, prefer to use Union types (algebraic types) like   
`int | Null | ...` because it is the best option to introduce the 
Undefined state (that allows statically typed data to represent 
the absence of a property).

`Sumtype!(Undefined,Null,int)`  instead  `Optional!(Nullable!int)`

Then there is the `match!` syntax, the unified way to treat JSON 
serialization and the easy way to implement a custom "dot" 
accessor that propagates the Null or Undefined state in a chain 
of references:

```d
person.ns.address.ns.city.ns.name.match!(
   (string name){ ... }
   (Null) {...}
   (Undefined) { ... }
)

```






More information about the Digitalmars-d-learn mailing list