PDA

View Full Version : تشخیص نوع داده



php_qq
شنبه 09 مرداد 1389, 11:04 صبح
سلام به همگی
چطوری می شه تو دلفی فهمید که یک عدد از نوع Integer هست یا از نوع Double؟ تابعی هست؟ مثلا توی php برای اینکار تابع هایی مثل is_float یا is_int هست ولی توی دلفی من ندیدم.
مرسی

Felony
شنبه 09 مرداد 1389, 11:35 صبح
تا جایی که من میدونم تابع خاصی برای این کار وجود نداره ، شما وقتی متغییر رو در حالت طراحی برنامه تعریف میکنید چه دلیلی داره نوعش رو به دست بیارید ؟

دلفــي
شنبه 09 مرداد 1389, 12:22 عصر
می تونی از توابع زیر استفاده کنی :



Function IsInt(s: String) : Boolean;
VAR
Code: Integer;
Valu: Integer;
BEGIN
val(s, Valu, Code);
Result := (Code = 0)
END;




Function IsFloat(s: String) : Boolean;
VAR
Code: integer;
Value:Double;
BEGIN
Val(s, Value, Code);
Result := (Code = 0)
END;

vcldeveloper
یک شنبه 10 مرداد 1389, 15:56 عصر
مثلا توی php برای اینکار تابع هایی مثل is_float یا is_int هست ولی توی دلفی من ندیدم.
برای اینکه PHP نوعی زبان دینامیک محسوب میشه و روی Type سختگیری زیادی نمیکنه، شما هم می تونید در یک متغیر هم عدد اعشاری قرار بدید، هم عدد صحیح. توی دلفی همچین برنامه ایی نیست. دلفی Strongly Typed هست؛ نوع متغیرها از قبل مشخص میشه، و اگر متغیری از یک نوع خاص باشه، نمیشه همینطوری داده ایی از نوع دیگه در آن ریخت.

zidane
دوشنبه 11 مرداد 1389, 11:23 صبح
با توابع:

VarIsFloat()
VarIsNumeric()

vcldeveloper
دوشنبه 11 مرداد 1389, 13:01 عصر
VarIsFloat()
VarIsNumeric()
اینها توابع کار با Variant هستند. Variant خودش یک نوع داده خاص هست که میتونه نوع های داده مختلفی رو در خودش جا بده. این توابع هم مشخص می کنند که یک داده Variant حاوی چه نوع داده ایی هست، و ارتباطی با سایر نوع های داده موجود در دلفی ندارند.

zidane
سه شنبه 12 مرداد 1389, 08:08 صبح
همون طوریکه اشاره کردید Varient انواع مختلفی رو قبول می کنه
شما اگه نوع داده رو ندونید می تونید اون رو بصورت Varient پاس بدید و بعدا با typecast ازش استفاده کنید
در این مثال:

var
a:Double;
b:Integer;
begin
if VarIsNumeric(a) then ShowMessage('a=numeric');
if VarIsFloat(a) then ShowMessage('a=float');
if VarIsNumeric(b) then ShowMessage('b=numeric');
if VarIsFloat(b) then ShowMessage('b=float');
end;سه تا ShowMessage اول نمایش داده می شوند که فکر می کنم کار دوستمون رو راه می اندازه!

این توابع هم مشخص می کنند که یک داده Variant حاوی چه نوع داده ایی هست، و ارتباطی با سایر نوع های داده موجود در دلفی ندارند.
با توجه به تعریف بالا این تابع نوع های مختلفی رو قبول می کنه نه فقط یک نوع داده خاص Varient

vcldeveloper
سه شنبه 12 مرداد 1389, 13:07 عصر
با توجه به تعریف بالا این تابع نوع های مختلفی رو قبول می کنه نه فقط یک نوع داده خاص Varient
این توابع فقط Variant قبول می کنند. اینکه می بینید شما داده هایی از نوع Double یا Integer و غیره را که بهشون می دید، ایراد نمی گیرند، به خاطر این هست که نوع داده Variant همچین داده هایی رو قبول میکنه، و کامپایلر به صورت Implicit این ها رو براتون Typecast میکنه به Variant. نوع داده Variant یک نوع داده خاص هست با سربار بسیار بالا که در جاهای خاصی مثل Microsoft COM کاربرد خاص خودش را داره.