Ana içeriğe geç

Pawn Stil Rehberi

Amaç, Pawn kaynak kodunun genellikle kabul edilen adlandırma kuralları ve diğer yönleri hakkında kısa bir rehber sunarak niyetin daha kolay iletilmesine ve kodun paylaşılmasına yönelik hata ayıklamayı kolaylaştırmaktır.

Ayrıca bakınız:

Terimler

İfade

Bir ifade, ana programı bir şey yapmaya zorlayan bir kod parçasıdır. Bir ifade, geçerli bir kod parçasıdır ve bazı sonuçlar verir.

a = b + c;

Bu, bir değişkene bir [#İfade] sonucu atan bir ifadedir.

SetPlayerColor(playerid, 0xFF4700FF);

Bu, programı belirli argümanlarla bir işlevi çağırmaya yönlendiren bir ifadedir.

x + 8

Bu bir ifade değildir çünkü sonuç başka bir yerde kullanılmaz, bu sadece bir [#İfade] dir.

Bileşik İfade

Bir bileşik ifade, süslü parantezlerle çevrili ifadelerin bir koleksiyonudur.

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

Bu, iki ifadeden oluşan bir bileşik ifadedir.

if (a == b)
{
print("Merhaba!");
}

Bu, genellikle "if ifadesi" olarak adlandırılan bir koşullu ifade içeren bir bileşik ifadedir.

return Function1(), Function2(), Function3();

Bu bir bileşik ifade değildir, virgülle ayrılmış ifadelerin bir zinciridir. Bu tür ifadelerin zincirleme kullanımı genellikle kötü bir uygulama olarak kabul edilir.

İfade

Bir ifade, bir değer üreten bir sözdizimi parçasıdır; kullanılmadığı sürece geçerli bir ifade değildir.

İfadeler genellikle ifadeleri birleştirerek ifadeler oluşturmak için kullanılır.

a + b

Bu, iki değeri alır ve bunlara toplama operatörünü uygulayan basit bir toplama ifadesidir.

İlkeler

Süslü Parantezler

Allman süslü parantezleri tercih edilir:

function()
{
//
}

Ancak, kas hafızasından vazgeçemiyorsanız, K&R süslü parantezleri de geçerlidir:

function() {
//
}

Switch Yapıları

Switch yapısı için iki girinti seviyesi kullanılmalıdır; biri switch bloğu için, diğeri ise her case ifadesi veya bileşik ifadesi için.

switch (degisken)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
default:
return -1;
}
switch (degisken)
{
case 0:
{
// kod...
return 0;
}
case 1:
{
// kod...
return 1;
}
case 2:
{
// kod...
return 2;
}
default:
{
// kod...
return -1;
}
}

Bileşik İfadeler (Bloklar)

Bloklar her zaman süslü parantezleri kullanmalıdır, hatta blok içinde sadece tek bir kod satırı varsa bile. Bu, fonksiyonlar dahil tüm seviyeler için geçerlidir.

func()
{
tekSatirIfade();
}
func()
{
if ()
{
tekSatirIfade();
}
}
func()
{
if ()
{
tekSatirIfade();
}
else if ()
{
//
}
else
{
//
}
}

Adlandırma

Fonksiyonlar

Fonksiyonlar her zaman PascalCase ile adlandırılmalıdır.

Global Değişkenler

new kullanılarak tanımlanan global değişkenler her zaman g_ öneki ile adlandırılmalıdır, bu nedenle g_DegiskenAdi, ancak static kullanılarak tanımlanmışlarsa her zaman s_ öneki ile PascalCase kullanmalıdır, yani s_DegiskenAdi

Sabit global değişkenler SCREAMING_SNAKE_CASE kullanmalıdır.

Yerel Değişkenler

Yerel değişkenler her zaman camelCase kullanmalıdır ve tek harfli isimler kullanılmamalıdır, ancak şunlar dışında:

  • i, j, k, vb. for döngülerinde
  • Matematik bağlamında x, y, z, vb.

Enumerators

Eğer adlandırılıyorsa, Enumerators, E_ (güçlü etiket) veya e_ (zayıf etiket) ile öneki almalıdır.

Enumerator alanları aynı zamanda SCREAMING_SNAKE_CASE kullanmalı ve enumerator adını önek olarak kullanmalıdır.

static enum E_PLAYER_DATA {
E_PLAYER_CASH,
Float:E_PLAYER_HEALTH,
}

Zayıf etiket kullanımı

static enum e_PLAYER_DATA {
E_PLAYER_CASH,
Float:E_PLAYER_HEALTH,
}

Adlandırılmayan enumerator alanları aynı zamanda SCREAMING_SNAKE_CASE kullanmalı ve enumerator adını önek olarak kullanmalıdır.

static enum {
ENUMATOR_INTEGER,
Float:ENUMATOR_FLOAT,
}

Enumerators her zaman modül dışında kullanılmıyorsa static olarak bildirilmelidir.

Makrolar ve Ön-işlemci Tanımları

Makrolar her zaman kullanımlarına bakılmaksızın SCREAMING_SNAKE_CASE kullanmalıdır.

Ön-işlemci tanımları (sabit tanımlamalar) aynı zamanda SCREAMING_SNAKE_CASE kullanmalıdır.

Bu, değişkenler ile sabitler arasındaki ve fonksiyonlar ile makrolar arasındaki farkı belirlemeye yardımcı olur.

Genellikle, dilin bir parçası olan kelimelerle kütüphane kelimeleri arasındaki karışıklığı önlemek için yeni sözdizimi elemanları icat etmekten kaçınılması önerilir.

Ancak, bazı eski kütüphaneler bunu yapar ve geriye dönük uyumluluk nedeniyle değiştiremezler.

Belgelendirme

Her zaman dışa aktarılan fonksiyonları, fonksiyonun adının kendisi olduğu ve ne yaptığına dair kısa bir açıklama içeren // FonksiyonAdi X, Y ve Z yapar ve A döndürür formatındaki basit bir satır yorumla belgeleyin. Her bir parametre hakkında ayrıntılı açıklamalar yapmaya gerek yoktur. Örneğin:

// LoadPlayerAccount, hesap yükleme sürecini başlatmak için çağrılır. Bu
// fonksiyon, oyuncu verilerini almak için HTTP çağrıları başlatır, oyuncuya
// iletiler gösterir ve nihayet işlem tamamlandığında başarıyla `OnPlayerLogin`
// etkinliğini tetikler. Başarısızlık durumunda oyuncu atılır.
stock Error:LoadPlayerAccount(playerid)
{
// kod...
}

Her paketin bir README dosyası olmalı ve gerektiğinde her modül, sağladığı şeyi tanımlayan ilk satırda bir yorum içermelidir.