Delphi jako C++ - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Delphi jako C++

5. prosince 2001, 00.00 | Přešli jste z C++ či Java do Delphi? A nechybí vám některé funkce C++. Například i++ či ++i - změny hodnoty proměné při vyhodnocování podmínek. Řešení je nasnadě, stačí jen trohu obohatit Delphi, a "můžete" programovat jako v C++.

Přešli jste z C++ či Java do Delphi?

Jestliže ano, pak vám asi chybí některé funkce C++. Množství funkcí, které Delphi chybí se často dá nahradit jiným způsobem, i když nutno říci, ne tak elegantním.

Řekl bych, že jedna spíše jedny z takových základních, jsou +=, -=, *= /=, %=, &=, |= atd. Delphi nemá pro všechny tyto zápisy vlastní náhradu. Pro první dvě to je inc(i) a dec(i). S tím rozdílem, že v Delphi to jsou procedury a tudíž je není možno použít při vyhodnocování podmínek aj. Samozřejmě všechny tyto zápisy lze zapsat standardní cestou, i:= i +n; ... Pro tyto zápisy ovšem platí to samé jako pro inc a dec.

Další základní jsou i++ respektive ++i a i-- respektive --i. Zkušený delfínář mi okamžitě namítne, že v Delphi se tyto zápisy nahrazují funkcemi succ(i) a pred(i). To je sice moc hezké, ale většinou ne moc nepoužitelné. V podstatě by tyto funkce měli být jen optimalizovanou variantou k zápisu i ±1. Vrací totiž změněnou kopii proměnné, ale se samotnou proměnou se nic neděje. Bohužel k tomu ještě Delphi nedokáže pravostranný zápis, nemohu si tedy vybírat, jestli mi to nejdříve vrátí hodnotu a pak teprve přičte / odečte či opačně.

C++ chápe tyto zápisy trochu odlišně něž Delphi. Tudíž již při vyhodnocování podmínek mohu měnit hodnoty i, a tím si zjednodušit zápis či zapsat více podmínek do jedné.

Tento primitivní problém lze řešit taktéž primitivní cestou a to vlastní implementací oněch funkcí. Nutno podotknout, že jakákoliv implementace bude vždy pomalejší než v C, kde je implementace již na bázi compileru. Zde je příklad, jak by se to dalo udělat:

// soubor unitc.pas
unit UnitC;

interface

function pp(var i: integer): integer; // ++i
function mm(var i: integer): integer; // --i
function ppR(var i: integer): integer; // i++
function mmR(var i: integer): integer; // i--
function setIt(var i: integer; const toInt: integer): integer; // +=, -=, *=, /= ...

implementation

function pp(var i: integer): integer;
begin
 inc(i);
 Result:= i;
end; // ++i

function mm(var i: integer): integer;
begin
 dec(i);
 Result:= i;
end; // --i

function ppR(var i: integer): integer;
begin
 Result:= i;
 inc(i);
end; // i++

function mmR(var i: integer): integer;
begin
 Result:= i;
 dec(i);
end; // i--

function setIt(var i: integer; const toInt: integer): integer;
begin
 i:= toInt;
 result:= i;
end; // +=, -=, *=, /= ...

end.

Bohužel v Delphi nemůžu definovat název funkce jako ++ či --, takže jsem to nahradil pp jako PlusPlus a mm jako MinusMinus. Navíc nemohu použít pravostranný zápis jména funkce, a tak jsem to nahradil písmenem r jako Right.

Těď jen stačí do jakékoliv aplikace vložit do položky uses UnitC; a začít využívat výhod tohoto zápisu.

To jestli to funguje či ne, a pro představu těch, kteří to neznají si můžeme napsat malinký prográmek. Spusťte si Delphi, vyberte nová aplikace a v Unit1.pas nahraďte slovo end. tím co následuje:

uses UnitC;

var i: integer;
begin
// test it
 if (setIt(i, 10) = 10) and (setIt(i, i div 10) = 1) then showMessage('Set works')
  else showMessage('Sorry, Set doesn''t work');
 i:= 5;
 if (i = 5) and (pp(i) = 6) and (ppR(i) = 6) and (i = 7) then showMessage('Increament works')
  else showMessage('Sorry, Increament doesn''t work');
 i:= 5;
 if (i = 5) and (mm(i) = 4) and (mmR(i) = 4) and (i = 3) then showMessage('Decreament works')
  else showMessage('Sorry, Decreament doesn''t work');
end.

Kompletní soubor UnitC.pas je zde

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: