Na FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmaNa FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmaDoSomething; DoThis; DoThat;Špatný způsob
DoSomething; DoThis; DoThat;
Result := LongExpression1 or ... or LongExpressionX or LongExpressionY or ... LongExpressionZ; Sum := VeryLongStatement1 + ... + VeryLongStatementN; Sum := VeryLongStatement1 + ... + VeryLongStatementX + VeryLongStatementY;Nevhodný způsob zalomení:
Result := LongExpression1 or ... LongExpressionX or LongExpressionY or ... LongExpressionZ;
VeryLongIdentifier : String;
Takovému způsobu pojmenování se říká pascalovský styl (Pascal casing, InfixCaps). Je to klasický způsob pojmenovávání identifikátorů v Pascalu, používá se však i v jazyce C#. Ve výjimečných případech (výčtové typy) můžeme použít i jiný způsob zápisu, velbloudí styl (Camel casing, CamelCaps). Oba styly zápisu se liší pouze prvním písmenem v identifikátoru, identifikátor podle velbloudího stylu má malé první písmeno. Klíčová slova píšeme malými písmeny. Spojování slov podtržítky se nedoporučuje. Rovněž je nevhodné používat kapitálky (velká písmena), ani pro názvy konstant.
type TButtonKind = (bkOk, bkCancel, bkRetry); (* velbloudí styl, výjimka u výčtového typu *) var ConfigPath: String; AverageSpeed: Integer; btnClose: TButton;Špatný zápis
VAR Config_Path: string; averagespeed: integer; UGLY_VALUE: longint;
SpeedInt: Integer;
procedure DoSomething(ParamX: Longint); function IsDeviceConnected: Boolean;
begin se neodsazuje a je vždy samostatně na řádku. Klíčová slova unit, uses, type, interface, implementation, initialization, finalization musí být zarovnány s levým okrajem, píší se tedy vždy s nulovým odsazením.
if Condition = false then begin DoThis; DoThat; end else begin DoSomethingElse; ... end;Špatné odsazení:
if Condition = false then begin (* odsazený begin, nemá být odsazený *) DoThis; DoThat; end else begin (* begin není na samostatném řádku *) DoSomethingElse; ... end; if Condition then begin DoThis; (* velmi špatný způsob odsazování *) DoThat; end;
array=:=type TLines = array [0..9] of String; var Lines: TLines; begin Result := ComputeSomething(ParamX, ParamY); Window.Show; DoSomethingElse(@Result); DoSomethingElse(@Lines[5, 20]); end;Ukázka nepěkného formátování
(* chybí mezera mezi array a levou hranatou závorkou *) type TLines = array[0..9] of String; (* nadbytečná mezera před dvojtečkou *) var Lines : TLines; (* chybějící a přebývající mezery *) begin Result:=ComputeSomething(ParamX, ParamY); Window. Show; DoSomethingElse( @ Result); DoSomethingElse(@ Lines [ 5 , 20 ] ); end;
pas. U zdrojových souborů FreePascalu je vhodné použít příponu pp. Přípony se píší malým písmenem.
System.pas, SysUtils.pp, WinBase.pas, OpenGL.ppPříklad špatného pojmenování:
opengl.pp, system.PAS, Win_Base.PAS, SYSUTILS.PAS
usesuses Crt, Printer; uses Crt, Printer, SysUtils, Windows, WinBase, WinConst, Drawing, Objects; uses Crt, Printer, SysUtils, Windows, WinBase, WinConst, Drawing, Objects;
const Radius = 0.5; StartLength: Integer = 6; BUFSIZE = 1024; (* nevhodné užití velkých písmen *) Buf_Count = 16; (* nevhodné užití podtržítka *)
type TLine = array [0..255] of Char; TMatrix = array [0..255, 0..100] of Real; TWindowsStatus = (wsActive, wsInactive, wsInvisible); (* velbloudí styl *) PPerson = ^TPerson; TPerson = record Name: String; Age: Integer; Next: PPerson; end;Špatný zápis:
type (* chybí mezera mezi array a levou hranatou závorkou *) TLine = array[0..255] of Char; (* typ nezačíná písmenem T a chybí mezera za čárkou *) Matrix = array [0..255,0..100] of Real; (* nevhodný zápis *) TWindowsStatus=( WS_ACTIVE, WS_INACTIVE, WS_INVISIBLE ); (* datovému typu ukazující na záznam chybí počáteční písmeno P *) Person = ^TPerson; (* nevhodný zápis a špatné odsazení o 3 znaky *) TPerson= record Name: String; Age: Integer; end;
class a object)unit BaseClasses; type TMyOldPascalClass = object(TObject) private Position: Longint; public constructor Init(Position: Longint); destructor Done; virtual; end; TMyDerivedClass = class(TMyClass) private FValue: Integer; procedure SetValue(Value: Integer); protected procedure Sort; public constructor Create; published property Value read FValue write SetValue; end; implementation constructor TMyOldPascalClass.Init(Position: Longint); begin self.Position := Position; end; ... end.
var SizeX, SizeY: Integer; MainWindow: TWindow; AboutWindow: TWindow;Nevhodná deklarace:
var SizeX, SizeY :Integer; (* špatně zvolené mezery *) MainWindow, AboutWindow : TWindow; (* více objektů na jednom řádku *)
procedure DoSomething; begin Compute; ... end; procedure FindTwoSolutions(var ResultX, ResultY: Integer); function SquareRoot(Value: Real): Real; (* zalomení dlouhé hlavičky, není zde dodržen pascalský styl formátování, protože se jedná o WinAPI funkci, tedy psanou céčkovým stylem *) function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall;Příklad nevhodného zápisu
(* funkce by měla vracet pouze jednu hodnotu! *) function FindTwoSolutions(var ResultX: Integer): Integer; (* nesprávné a nejasné zalomení hlavičky *) function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall;
ifbegin bychom měli psát na zvláštní řádek. Je také doporučeno psát příkaz celou konstrukci příkazu if minimálně na dva řádky. V případě složitých podmínek se logické binární operátory (and, or, xor) píší na konec řádku.
if A < B then DoSomething; if A < B then begin DoSomething; DoSomethingElse; end else DoThis; if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; if A < B then begin DoSomething; DoSomethingElse; end else DoThis; if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; (* or je správně na konci řádku *) if (LongExpression1) or (LongExpression2) or (LongExpression3) then begin ... end;Nevhodný zápis:
if A < B then DoSomething; if A < B then DoSomething else DoThis; if A < B then begin DoSomething; DoSomethingElse; end else begin DoThis; DoThat; end; (* or je nevhodně na začátku řádku *) if (LongExpression1) or (LongExpression2) or (LongExpression3) then begin ... end;
forfor i := 0 to 10 do begin DoSomething; DoSomethingElse; end;Příklad nesprávně zapsaného cyklu:
for i := 0 to 10 do begin DoSomething; DoSomethingElse; end;
whilewhile x < j do begin DoSomething; DoSomethingElse; end;Příklad nesprávně zapsaného cyklu:
while x < j do begin DoSomething; DoSomethingElse; end;
repeatrepeat x := j; j := UpdateValue; until j > 25;
casebegin end kvůli zvýšení přehlednosti. Příklady doporučeného způsobu zápisu:
case Control.Align of alLeft, alNone: NewRange := Max(NewRange, Position); alRight: Inc(AlignMargin, Control.Width); end; case x of csStart: begin j := UpdateValue; end; csBegin: x := j; csTimeOut: begin j := x; x := UpdateValue; end; end; case ScrollCode of SB_LINEUP, SB_LINEDOWN: begin Incr := FIncrement div FLineDiv; FinalIncr := FIncrement mod FLineDiv; Count := FLineDiv; end; SB_PAGEUP, SB_PAGEDOWN: begin Incr := FPageIncrement; FinalIncr := Incr mod FPageDiv; Incr := Incr div FPageDiv; Count := FPageDiv; end; else Count := 0; Incr := 0; FinalIncr := 0; end;