Konvence pro skriptovací jazyk: Porovnání verzí

Z enTeam
Skočit na navigaci Skočit na vyhledávání
 
Řádek 6: Řádek 6:
 
*Mezery před a za názvem knihovny
 
*Mezery před a za názvem knihovny
 
*Deklarace nezalamujeme
 
*Deklarace nezalamujeme
 +
*Deklarace řadíme dle abecedy (kvůli zamezení duplicitním deklaracím)
 +
*Pro každou knihovnu vytvoříme vlastní blok deklarací (např. kvůli problematice [[#Uvolnění knihovny externích funkcí]])
 
*Za blokem deklarací vynecháme jeden řádek
 
*Za blokem deklarací vynecháme jeden řádek
 
<pre style="background-color: rgb(255, 153, 153);">
 
<pre style="background-color: rgb(255, 153, 153);">
Řádek 21: Řádek 23:
 
*Bez mezer kolem <code>()</code>
 
*Bez mezer kolem <code>()</code>
 
*Název začíná velkým písmenem, ostatní písmena jsou malá, s výjimkou počátečních písmen dalších slov
 
*Název začíná velkým písmenem, ostatní písmena jsou malá, s výjimkou počátečních písmen dalších slov
*Standardně pojmenování v angličtině, pokud ale jsou historicky skripty v upravovaném workflow pojmenovány česky, můžeme při úpravách pojmenovávat nadále v češtině
 
 
<pre style="background-color: rgb(255, 153, 153);">
 
<pre style="background-color: rgb(255, 153, 153);">
 
script Get_currency_code(): string // Špatně
 
script Get_currency_code(): string // Špatně
Řádek 51: Řádek 52:
 
*Na stejné řádce vždy pouze úzce související proměnné (např. souřadnice <code>X</code>, <code>Y</code>)
 
*Na stejné řádce vždy pouze úzce související proměnné (např. souřadnice <code>X</code>, <code>Y</code>)
 
*Mezera za znaky <code>,</code>, resp. <code>:</code>, nikdy ne před těmito znaky
 
*Mezera za znaky <code>,</code>, resp. <code>:</code>, nikdy ne před těmito znaky
*Proměnné pojmenováváme vždy popisnými jmény, nepojmenováváme pouze jedním písmenem (výjimkou mohou být např. souřadnice <code>X</code>, <code>Y</code>, řídící proměnné cyklů <code>I</code>, <code>J</code> atpod.)
+
*Proměnné pojmenováváme vždy popisnými jmény, nepojmenováváme pouze jedním písmenem (výjimkou mohou být např. souřadnice <code>X</code>, <code>Y</code>, řídící proměnné cyklů <code>I</code>, <code>J</code> atd.)
 
*Proměnné pojmenováváme malými písmeny, pouze počáteční písmena slov jsou velká (platí i pro globální proměnné)
 
*Proměnné pojmenováváme malými písmeny, pouze počáteční písmena slov jsou velká (platí i pro globální proměnné)
 
*V názvech nepoužíváme podtržítka (platí i pro globální proměnné)
 
*V názvech nepoužíváme podtržítka (platí i pro globální proměnné)
Řádek 255: Řádek 256:
 
*Pokud známe potřebný výsledek před dokončením všech obrátek cyklu, vždy jej předčasně ukončíme příkazem <code>break</code>
 
*Pokud známe potřebný výsledek před dokončením všech obrátek cyklu, vždy jej předčasně ukončíme příkazem <code>break</code>
 
*Pokud před dokončením jednoho průchodu cyklem víme, že nemůžeme získat potřebný výsledek, pokročíme rovnou na další index pomocí příkazu <code>continue</code>
 
*Pokud před dokončením jednoho průchodu cyklem víme, že nemůžeme získat potřebný výsledek, pokročíme rovnou na další index pomocí příkazu <code>continue</code>
 +
|}
 +
= Uvolnění knihovny externích funkcí =
 +
{|
 +
|-
 +
*Knihovna je standardně načtena skriptem při použití první funkce z této knihovny
 +
*Knihovna je automaticky uvolněna s koncem skriptu
 +
*Pokud je volán podskript a knihovna externích funkcí již byla načtena v nadřazeném skriptu, není již znovu načtena
 +
**V tom případě není knihovna ani uvolněna s koncem skriptu
 +
*Pokud je potřeba zamezit uvolnění knihovny s koncem skriptu (např. kvůli předání hodnot nadřazenému skriptu), je potřeba za deklaraci funkce z knihovny vložit klíčové slovo <code>nounload</code>
 +
**Toto klíčové slovo je nutné vložit vždy za první deklaraci z této knihovny
 +
<pre style="background-color: rgb(153, 255, 153);">
 +
declare function GetCurrency dll "ActualDocument" (string): currency nounload
 +
</pre>
 
|}
 
|}
 
[[Category: enTeam skripty]]
 
[[Category: enTeam skripty]]

Aktuální verze z 9. 8. 2021, 10:10

Tento dokument popisuje konvence skriptovacího jazyka

Deklarace externích funkcí

  • Bez odsazení
  • Mezery před a za názvem knihovny
  • Deklarace nezalamujeme
  • Deklarace řadíme dle abecedy (kvůli zamezení duplicitním deklaracím)
  • Pro každou knihovnu vytvoříme vlastní blok deklarací (např. kvůli problematice #Uvolnění knihovny externích funkcí)
  • Za blokem deklarací vynecháme jeden řádek
declare function GetCurrency dll"ActualDocument"(string): currency // Špatně
declare function GetCurrency dll "ActualDocument" (string): currency // OK

Název skriptu

  • Bez odsazení
  • Bez mezer kolem ()
  • Název začíná velkým písmenem, ostatní písmena jsou malá, s výjimkou počátečních písmen dalších slov
script Get_currency_code(): string // Špatně
script GetCurrencyCode () : string // Špatně
script GetCurrencyCode(): string // OK

Klíčová slova

  • Klíčová slova (zvýrazněná v editoru), např. názvy typů, píšeme vždy malými písmeny
  • Pozor na klíčové slovo nounload, které se nezvýrazňuje
String, Integer, ActualDocument, Result // Špatně
string, integer, actualdocument, result // OK

Lokální proměnné

  • Deklarace první proměnné je vždy pod klíčovým slovem var, nikdy ne na stejné řádce
  • Odsazení 2 mezery
  • Na stejné řádce vždy pouze úzce související proměnné (např. souřadnice X, Y)
  • Mezera za znaky ,, resp. :, nikdy ne před těmito znaky
  • Proměnné pojmenováváme vždy popisnými jmény, nepojmenováváme pouze jedním písmenem (výjimkou mohou být např. souřadnice X, Y, řídící proměnné cyklů I, J atd.)
  • Proměnné pojmenováváme malými písmeny, pouze počáteční písmena slov jsou velká (platí i pro globální proměnné)
  • V názvech nepoužíváme podtržítka (platí i pro globální proměnné)
  • Pro proměnné, které mají neočekávaný typ, používáme prefixy psané malými písmeny
Typ Prefix
string s
integer i
boolean b
date d
currency c
user u
usercollection uc
  • Nepoužíváme lokální listové proměnné (stringlist, integerlist, …), protože nefungují správně
var Count: integer // Špatné odsazení, schází zalomení
  S_Count: string // Špatné pojmenování proměnné
var
  Count: integer // OK
  sCount: string // OK

Lokální konstanty

  • Konstanty zapisujeme do sekce var, protože sekci pro konstanty skriptovací jazyk nepodporuje
  • Konstanty v sekci zapisujeme před proměnné a mezi konstantami a proměnnými vždy vynecháme prázdný řádek
  • Konstanty pro odlišení pojmenováváme pouze velkými písmeny, pro oddělení slov používáme podtržítko
  • Je vhodné pro přehlednost všechny konstanty nadefinovat hned na začátku skriptu
var
  ItemCount: integer // Špatné pojmenování konstanty, označuje proměnnou
var
  ITEM_COUNT: integer // OK

Tok skriptu

  • Odsazení na 2 mezery
  • Maximální délka řádku 80 znaků
    • Tolerovat lze nezalomení do 100 znaků
  • Při zalomení řádku je na dalším řádku (řádcích) odsazení 4 mezery
  • Zalamování je vhodné za oddělovači (, :), binárními operátory (+ - * / = := += -= ++= or and, ...) nebo za ( [
// Špatně
I := 0 J := 0

if I > 0 then J += 1 end
// OK
I := 0
J := 0

if I > 0 then
  J += 1
end

Komentáře

  • Komentáře se zarovnávají stejně jako kód skriptu
  • Za uvozením komentáře vložíme mezeru a začneme velkým písmenem
  • U víceřádkového komentáře nepoužíváme // a komentář zarovnáme do bloku
//špatně
/* Také
špatně */
// Toto je správně
/* Také
   správně */

Výrazy

  • Vkládáme jednu mezeru před i za operátor
  • Nevkládáme zbytečné závorky
    • Výjimkou jsou logické výrazy obsahující více podmínek, kde zápis bez závorek ztrácí na přehlednosti
// Špatně
I:=J+5
if (I = 0) then
if I = 0 and J = 0 then
// OK
I := J + 5
if I = 0 then
if (I = 0) and (J = 0) then

Ukončení příkazů

  • Koncový end je vždy zarovnán stejně jako příkaz, ke kterému se váže
  • Blok kódu pod tento příkaz spadající je oproti příkazu odsazen o 2 mezery
// Špatně
if I = 0 then I += 1 end 
// OK
if I = 0 then
  I += 1
end

Příkazy

Příkaz if (else)

  • Blok kódu pod tento příkaz spadající je oproti příkazu odsazen o 2 znaky
  • Pokud je testována jedna proměnná na více hodnot, používáme pro přehlednost i zvýšení výkonu else větev
    • Toto neplatí, pokud se řídící proměnná podmínky může změnit v kódu spadajícím pod předchozí podmínku
if I < 0 then
  write("Záporné číslo")
end
if I = 0 then
  write("Nula")
end
if I > 0 then
  write("Kladné číslo")
end
if I < 0 then
  write("Záporné číslo")
else
  if I = 0 then
    write("Nula")
  else
    write("Kladné číslo")
  end
end

Příkaz case

  • Protože příkaz case nefunguje správně, je nutné použít sadu podmínek if !!!
  • Pokud je velké množství porovnávaných hodnot a docházelo by k velkému zanoření kódu kvůli cyklickému odsazení else větví, je možné použít cyklus while true do se sadou podmínek, kdy každá obsahuje příkaz break pro ukončení cyklu a ukončení porovnávání hodnot
    • Pokud bude zapomenut příkaz break, skončí skript v nekonečné smyčce
while true do
  if I = 0 then
    write("Nula")
    break
  end
  
  if I = 1 then
    write("Jedna")
    break
  end
  
  if I = 2 then
    write("Dva")
    break
  end
  
  // Else větev
  write("Neznámé číslo")
  break
end

Cykly while do, for to do, foreach do

  • Pokud známe potřebný výsledek před dokončením všech obrátek cyklu, vždy jej předčasně ukončíme příkazem break
  • Pokud před dokončením jednoho průchodu cyklem víme, že nemůžeme získat potřebný výsledek, pokročíme rovnou na další index pomocí příkazu continue

Uvolnění knihovny externích funkcí

  • Knihovna je standardně načtena skriptem při použití první funkce z této knihovny
  • Knihovna je automaticky uvolněna s koncem skriptu
  • Pokud je volán podskript a knihovna externích funkcí již byla načtena v nadřazeném skriptu, není již znovu načtena
    • V tom případě není knihovna ani uvolněna s koncem skriptu
  • Pokud je potřeba zamezit uvolnění knihovny s koncem skriptu (např. kvůli předání hodnot nadřazenému skriptu), je potřeba za deklaraci funkce z knihovny vložit klíčové slovo nounload
    • Toto klíčové slovo je nutné vložit vždy za první deklaraci z této knihovny
declare function GetCurrency dll "ActualDocument" (string): currency nounload