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