Ga naar hoofdinhoud

Pawn Stijlgids

Dit document is een korte gids met gangbare naamgevingsconventies en andere aspecten van Pawn-broncode om intentie beter over te brengen en debugging en het delen van code te stroomlijnen.

Zie ook:

Terminologie

Statement

Een statement is code die het programma imperatief iets laat doen en een resultaat oplevert.

a = b + c;

Dit is een statement waarin een variabele het resultaat van een [#Expressie] krijgt.

SetPlayerColor(playerid, 0xFF4700FF);

Dit is een statement dat een functie met argumenten aanroept.

x + 8

Dit is géén statement; het resultaat wordt nergens gebruikt. Dit is alleen een [#Expressie].

Compound Statement

Een compound statement is een verzameling statements omgeven door accolades.

{
new message[] = "hi!";
print(message);
}

Expressie

Een expressie levert een waarde op, maar is geen geldig statement tenzij de waarde gebruikt wordt.

a + b

Richtlijnen

Accolades

Allman-accolades hebben de voorkeur:

function()
{
//
}

K&R is ook geldig Pawn:

function() {
//
}

Switches

Gebruik twee inspringniveaus: één voor switch en één voor iedere case of block.

switch (variable)
{
case 0:
return 0;
case 1:
return 1;
default:
return -1;
}

Blocks

Gebruik altijd accolades, ook bij één regel code, op alle niveaus (inclusief functies).

func()
{
singleLineExpr();
}

Naamgeving

Functies

Functies: PascalCase.

Globale variabelen

Globale new: g_ + PascalCase (g_VariableName). Globale static: s_ + PascalCase (s_VariableName).

Constants: SCREAMING_SNAKE_CASE.

Lokale variabelen

Lokaal: camelCase. Geen enkelletter-namen, behalve:

  • i, j, k, … in for-lussen
  • x, y, z, … in wiskundige context

Enumerators

Genamed: prefix E_ (sterke tag) of e_ (zwakke tag). Velden: SCREAMING_SNAKE_CASE, met enum-naam als prefix.

static enum E_PLAYER_DATA {
E_PLAYER_CASH,
Float:E_PLAYER_HEALTH,
}

Enumerators zijn static, tenzij extern gebruikt.

Macro’s en Preprocessor-defines

Altijd SCREAMING_SNAKE_CASE. Vermijd nieuwe syntaxis-elementen om verwarring te voorkomen.

Documentatie

Documenteer geëxporteerde functies kort met één regel, bv. // FunctionName doet X, Y, Z en retourneert A. Elk pakket heeft een README; modules kunnen een korte eerste-regelbeschrijving hebben.