Pawn Style Guide
Ang documentation na ito a maikli lang para sa general accepted naming convensions (Please sumunod sa mga naming convensions para madali matrack ang mga variables or macros mo) at iba
Tignan den ang mga ito:
Terminology
Statement
Ang statement
ay isang pirasong code na nagsasabi sa host program na gawen ang isang bagay. And statement
ay isang valid na pirasong code na naghahawak ng isang result/resulta.
a = b + c;
Eto ang isang statement na kinokompose ng variable na nakaassign dito ang isang resulta na tinatawag na [#Expression]
SetPlayerColor(playerid, 0xFF4700FF);
Eto ay statement na nagsasabi sa program na tumawag ng function na may arugmento.
x + 8
Ang isang to ay HINDI statement kasi yung resulta ay hindi naman ginagamit kahit saan, eto ay isang [#Expression] lamang.
Compound Statement
Ang compound statement ay isang collection ng mga statements na pinapalibutan ng braces
new message[] = "Magandang Umaga!";
print(message);
Eto ay isang compound statement na kinokompose ng dalawang statement.
if (a == b)
{
print("Kamusta ka?");
}
Eto ay isang compound statement na may if
condition, eto ay usually na tinatawag na "if statement".
return Function1(), Function2(), Function3();
Eto ay HINDI compound statement, eto ay chain ng statements na pinag hihiwalay ng commas ,
, Eto ay form ng chaining statements ay kinokonsinderang bad practice para sa mga baguhan sa Pawn.
Expression
Ang expression ay isang pirasong syntax na naghahawak ng value/halaga, Eto ay hindi valid statement unless ang tagapaghawak na value ay ginamit sa ibang pamamaraan.
Expressions ay madalas na kinokompose para makabuo ng statements.
a + b
Eto ay isang madaling addition expression na kumukuha ng dalawang values/halaga at inaapply ang add operator sakanila.
Guidelines
Braces
Allman braces ay recomendado:
function()
{
//
}
Sapagkat, kung di kaya ng muscle memory mo, K&R braces ay pwede rin sa Pawn:
function() {
//
}
Switches
Switches ay dapat merong dalawang indent levels, isa para sa switch
block at yung isa ay para sa bawa case
statement o compound statement.
switch (variable)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
default:
return -1;
}
switch (variable)
{
case 0:
{
// code...
return 0;
}
case 1:
{
// code...
return 1;
}
case 2:
{
// code...
return 2;
}
default:
{
// code...
return -1;
}
}
Compound Statements (Blocks)
Blocks ay dapat palaging gumagamit ng braces, kahit eto ay isang line of code lang ang nag-eexist sa block. Eto ay nag-aapply sa lahat ng level kahit eto pa ay function.
func()
{
singleLineExpr();
}
func()
{
if ()
{
singleLineExpr();
}
}
func()
{
if ()
{
singleLineExpr();
}
else if ()
{
//
}
else
{
//
}
}
Naming
(Utang na loob please gumamit kayo neto).
Functions
Functions ay dapat gumamit ng PascalCase
.
Global Variables
Global variables declared gamit ang new
dapat ay palaging merong g~
prefixed PascalCase. example ay new g_VariableName
, Pero kung ikaw ay gumamit ng static
eto ay dapat merong s_
prefixed PascalCase, example static s_VariableName
Constant globals ay dapat gumamit ng SCREAMING_SNAKE_CASE
.
Local Variables
Local variables ay dapat palaging gumamit ng camelCase
at dapat wag na wag kang gumamit ng single letter names, except sa:
i
,j
,k
, eto para safor
loops.x
,y
,z
, etc para sa mathematical contexts
Enumerators
Enumerators, kung pangalan, ay dapat gumamit ng prefix na E_
(isang strong tag) or e_
(isang weak tag)
Enumerator fields ay dapat SCREAMING_SNAKE_CASE
at ang gamit ng enumerator name para sa prefix.
static enum E_PLAYER_DATA
{
E_PLAYER_CASH,
Float:E_PLAYER_HEALTH,
}
Paggumamit ng weak tag
static enum e_PLAYER_DATA
{
E_PLAYER_CASH,
Float:E_PLAYER_HEALTH,
}
Non-named enumerator fields ay dapat ding SCREAMING_SNAKE_CASE
at dapat ginagamit ang enumerator name as a prefix.
static enum
{
ENUMATOR_INTEGER,
Float:ENUMATOR_FLOAT,
}
Enumerators ay dapat palaging declared static
except ay gagamitin eto sa labas ng module.
Macros and Pre-Processor Definitions
Macros ay dapat palaging gumamit ng SCREAMING_SNAKE_CASE
regardless sa paggamit nila.
Pre-Processor definitions (constant definitions)
ay dapat gumagamit ng SCREAMING_SNAKE_CASE
.
Eto ay makakatulong idifferentiate sa pagitan ng variables at constants included dito ang functions at macros.
Eto ay generally advised para maiwasan ang paggawa ng syntactical elements para maprevent ang confusion para sa newcomers as to which words ay parte ng language (Pawn) at which words ay galing sa libraries (Mga nadodownload na .inc).
Pero, ang ibang matatandang libraries ginagawa to at hindi nila mabago dahil sa backwards compatibility.
Documentation
Palaging document exported functions na may simpleng linya comment sa format // FunctionName does X, Y and Z and returns A
saan ang unang word ay ang pangalan ng function itself kasunod ang description na ano ang ginagawa netong function na it. Hindi na kelangan magsayang ng oras sapagdedescribe para sa bawat individual parameter.
Example:
// LoadPlayerAccount is called to initiate the account load process. This
// function will trigger HTTP calls to get player data, it will display dialogs
// to the player and eventually, once the process has completed, the event
// `OnPlayerLogin` is emitted on success. On failure, the player is kicked.
stock Error:LoadPlayerAccount(playerid)
{
// code...
}
Bawat package ay dapat merong README.md
at, kung necessary, bawat isang module ay dapat merong comment sa pinaka unang line na nagdedescribe na anong mga pwede ibigay ng module na to.
Ikaw ay binabati ko at ikaw ay meron nang alam tungkol sa Pawn language.