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:
|
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:
|
Kompletní soubor UnitC.pas je zde.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007