Aki Delphiben kódol, az tudja, hogy van az úgynevezett TEdit
komponens, ami a közönséges beviteli mező (mint HTML esetében az <input> tag). Tegyük fel, hogy két mezőben található számokat össze akarunk adni, és az eredményt egy TLabel
en ki akarjuk jelezni. Ekkor ugye deklarálunk két változót, melyek most például integer típusúak (-2147483648 … 2147483647 tartományban), és mondjuk egy gomb megnyomására összeadja a két számot, mondjuk így:
Procedure Osszeadas(Sender: TObject);
Var a,b : integer; //itt deklaráljuk ugye;
Begin
a := Edit1.Value;
b := Edit2.Value;
Label1.Caption := a + b;
End;
Ennyivel készen is lennénk, ám fordításkor kapunk egy ilyen hibaüzenetet:
[Error]: Fatal error, incompatible types, string and integer.
Ilyenkor két megoldás lehetséges, az egyik, hogy a TEdit
komponens helyett a TSpinEdit
et használjuk, ami alapból integer típussal dolgozik, de ez csúnya. Helyette csináljuk azt, hogy a két beviteli mezőből kapott string típusú értéket integerré alakítjuk. Ebben az esetben ennyivel módosítjuk az előző kódot:
...
a := StrToInt(Edit1.Value);
b := StrToInt(Edit2.Value);
...
Szépen kapunk két integert, és ezeket bátran összeadhatjuk, szorozhatjuk, oszthatjuk, és így tovább. Persze, másnak ez egyértelmű, de nekem (a PHP után) kicsit szokatlan, hogy típusokra figyelni kell.
Kilenc bejegyzés egy nap, hmm. Lehet tényleg nőhiányom van. 😀
Tetszett a bejegyzés?
Megköszönöm, ha nyomsz rá egy like-ot vagy megosztod másokkal:
Devilll
2006. március 01. — 23:17:17
Ez igaziból úgy van, hogy:
[code]
Procedure Osszeadas(Sender: TObject);
Var a,b : integer; //itt deklaráljuk ugye;
hiba : boolean;
Begin
hiba:=false;
try a := StrToInt(Edit1.Text);
except on EConvertError do begin
(* ide lehet azt írni, hogy mi van, ha nem tud konvertálni*)
hiba:=true;
end;
end;
try b := StrToInt(Edit2.Text);
except on EConvertError do begin
(* ide lehet azt írni, hogy mi van, ha nem tud konvertálni*)
hiba:=true;
end;
end;
if (not hiba) then Label1.Caption := IntToStr(a+b)
else Label1.Caption := ‘Nem sikerült a műveletet elvégezni.’;
End;
[/code]
Az if utáni zárójelezés egyébként nem kötelező, de javaslom mindenkinek. Ez a PHP szintaxis miatt van így nálam, de szerintem átláthatóbbá teszi a forrást is.
És biztos működik az is, amit mefi írt 😉 Ez a verzió azonban minden Delphivel megy nem csak a 7-estől… A 6-os Delphiben ugyanis ég a TEdit-nek nem volt Value értéke. Ott kénytelenek voltunk ezt használni.
Balázs
2006. március 01. — 23:20:11
Szerintem a nőhiányhoz két dolog kell, vagy-kapcsolatban:
1. leszbikus legyél, de ahhoz neked is nőnek kellene lenned, ez a feltétel kilőve
2. heteroszexuális legyél, de ez nálad ismét kilőve, buzikám.
Én amúgy php esetén is figyelni szoktam a típusokra, nem szeretem a szezont a fazonnal keverni.
Devilll
2006. március 01. — 23:27:46
Amúgy PHP 3-tól automata a típuskonverzió…
Balázs
2006. március 01. — 23:43:15
mefi: szerencsére. Prostikkal nem kezdek. ;]
Balázs
2006. március 01. — 23:51:51
Ingyenkurvára mindenkinek [q]fussa[/q]. 😉
tiny
2006. március 01. — 23:59:49
Tolsz egy StringToInt függvényt, akkor minden jó lesz.
tiny
2006. március 02. — 00:01:04
Jah látom Devilll is ezt írta. Mindegy, reggel van 😀
tiny
2006. március 02. — 15:02:26
Nem olyan durva. Könnyű megszokni, meg kevés a kötöttség is.
moikboy
2006. március 02. — 17:06:26
Szerintem sokkal biztonságosabb egy típusos nyelv. Ha a php típusos lenne, akkor nem kéne tartani a különböző GET és POST injection-öktől sem.
suexID
2006. június 05. — 22:41:38
Nekem nagyon idegennek tűnnek ezek a szigorúan típusos nyelvek a PHP után, pedig programoztam 1-1,5 évet pascalban. Most, hogy a suliban a nyakunkon van a C++ kicsit sikerül visszaszokni, de hosszú távon nem tudnám elviselni.
Mefi
2006. július 22. — 12:27:48
Figyelni kell, de tudtommal a PHP 4. valahanyadik verziójától automatikusan működik a típusválasztás.
[code]
$a = 3; [i]//integer[/i]
$b = “3”;[i]//string[/i]
[/code]
És nem vagyok a buzikád. ;]
Mefi
2006. július 22. — 12:27:48
Ha prosti lennék, nem tudnál megfizetni. ;]
Mefi
2006. július 22. — 12:27:48
De én nem lennék ingyenkurva. ;]
Mefi
2006. július 22. — 12:27:48
Igen, ezt írtam én is. 🙂
Mefi
2006. július 22. — 12:27:48
Igen, eléggé kényelmetlen, mert mindenhez segédváltozót kell definiálni, vagy átkonvertálni.
Mefi
2006. július 22. — 12:27:48
Biztonságosabbnak lehet, hogy biztonságosabb, de én kényelmesebbnek tartom a POST és a GET tömbök használatát.
Samu
2014. július 22. — 17:34:25
Szerintem ez a egyszerűbb:
procedure TMainForm.Edit1Change(Sender: TObject);
Var
a, b : integer;
begin
a := 0;
b := 0;
a := StrToInt (Edit1.Text);
b := StrToInt (Edit2.Text);
Label9.Caption:= IntToStr (a + b);
end;