'idiomatic' porting of c and or c++ code that does NULL checking

hane via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Aug 23 04:20:18 PDT 2014


On Saturday, 23 August 2014 at 10:19:59 UTC, nikki wrote:
> I am learning SDL by following the lazyfoo SDL2 tuorials, I am 
> alos new to D so I have a question:
>
> I the lazyfoo tutorials there are many functions that have a 
> bool success whiich gets set at various places when something 
> goes wrong to be returned afterwards.
>
> http://lazyfoo.net/tutorials/SDL/02_getting_an_image_on_the_screen/index.php
> for example:
> [code]
>
> bool init()
> {
>     //Initialization flag
>     bool success = true;
>
>     //Initialize SDL
>     if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
>     {
>         printf( "SDL could not initialize! SDL_Error: %s\n", 
> SDL_GetError() );
>         success = false;
>     }
>     else
>     {
>         //Create window
>         gWindow = SDL_CreateWindow( "SDL Tutorial", 
> SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, 
> SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
>         if( gWindow == NULL )
>         {
>             printf( "Window could not be created! SDL_Error: 
> %s\n", SDL_GetError() );
>             success = false;
>         }
>         else
>         {
>             //Get window surface
>             gScreenSurface = SDL_GetWindowSurface( gWindow );
>         }
>     }
>
>     return success;
> }
>
>
> [/code]
>
>
> in my D code I just change the NULL into null and the printf to 
> a fitting writeln.
> But I am wondering if D offers me much cleaner ways of writing 
> this, I am guessing the scope() but what would be the best/D 
> way of writing this function?
>
> How would you write it?

How about this?

----
import std.exception; // enforce() is declared in std.exception

void init()
{
	// enforce() throws an exception if condition is false
	enforce(SDL_Init( SDL_INIT_VIDEO ) >= 0, "SDL could not 
initialize!");

	// enforce() throws if SDL_CreateWindow returns null
	gWindow = SDL_CreateWindow(/* ... */).enforce("Window could not 
be created!");

	// ditto
	gScreenSurface = SDL_GetWindowSurface(gWindow).enforce("Surface 
could not be created!");
}
----


More information about the Digitalmars-d-learn mailing list