[OT] Some neat ideas from the Kotlin language

Kagamin via Digitalmars-d digitalmars-d at puremagic.com
Wed Feb 24 02:05:43 PST 2016


On Tuesday, 23 February 2016 at 22:03:32 UTC, Xinok wrote:
> On Tuesday, 23 February 2016 at 19:43:43 UTC, rsw0x wrote:
>> ...
>> How does this differ from the example I gave where the branch 
>> is only taken if the pointer is non-null?
>
> D doesn't prevent you from dereferencing a null pointer whereas 
> these scenarios should be impossible in Kotlin as well as Rust. 
> Case and point, this code compiles without issue but crashes at 
> runtime:
>
>     int* foo()
>     {
>         return null;
>     }
>
>     void main()
>     {
>         if(int* ptr = new int)
>         {
>             ptr = foo();  // Whoops...
>             *ptr = 35;    // Crash
>         }
>     }
>
> In D, pointers and reference types can spontaneously become 
> null under almost any context. That's the difference.

The idea is to match non-null pointers, this is how you do it:

     int* foo()
     {
         return null;
     }

     void main()
     {
         if(int* ptr = foo())
         {
             *ptr = 35;    // no crash
         }
     }


More information about the Digitalmars-d mailing list