nikki:

How would you write it?

I don't know how much idiomatic this is, but you can start cleaning up the code:
- Renaming the function with something more clear;
- using a D enumeration for the various constants.
- I have used a "." before the module-level variables to denote better they are not local;
- I have used an alias and stderror.
- All the code below is untested.


bool initializeSDL()
out {
    assert(.gWindow != null);
    assert(.gScreenSurface != null);
} body {
    alias success = bool;

    if (SDL_Init(SDL.init_video) < 0) {
        stderr.writeln("SDL could not initialize! SDL_Error: ",
                       SDL_GetError);
        return success(false);
    } else {
        .gWindow = SDL_CreateWindow("SDL Tutorial",
                                    SDL.qindowpos_undefined,
                                    SDL.windowpos_undefined,
                                    screen_width,
                                    screen_height,
                                    SDL.window_shown);

        if (.gWindow == null) {
stderr.writeln("Window could not be created! SDL_Error: ",
                           SDL_GetError);
            return success(false);
        } else {
            .gScreenSurface = SDL_GetWindowSurface(.gWindow);
        }
    }

    return success(true);
}



In D error messages are often given by throwing errors, so this looks a little more idiomatic:


bool initializeSDL() nothrow
out {
    assert(.gWindow != null);
    assert(.gScreenSurface != null);
} body {
    if (SDL_Init(SDL.init_video) < 0) {
throw new text("SDL could not initialize: ", SDL_GetError).SDL_Error;
    } else {
        .gWindow = SDL_CreateWindow("SDL Tutorial",
                                    SDL.qindowpos_undefined,
                                    SDL.windowpos_undefined,
                                    screen_width,
                                    screen_height,
                                    SDL.window_shown);

        if (.gWindow == null) {
throw new text("Window could not be created: ", SDL_GetError).SDL_Error;
        } else {
            gScreenSurface = SDL_GetWindowSurface(gWindow);
        }
    }
}


If you can add some more function attributes, like @safe.

Bye,
bearophile

Reply via email to