امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
میشه اینتجر رو بولین در نظر گرفت
نویسنده پیام
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #1
میشه اینتجر رو بولین در نظر گرفت
سلام.
2 سوال ساده ولی اصولی و پایه ای دارم.
حتما میدونید که در ویبی 0 فالسه و غیر 0 ترو. من هنگام کدنویسی اگر بخوام یه اینتجر رو تو یه شرط به کار ببرم میگم مثلا if a then در حالی که a اینتجره نه بولین. از یکی شنیدم این روش کدنویسی اشتباهه. میگفت سیستم عامل باید بیاد پشت پرده این اینتجر رو به بولین تبدیل کنه و مقایسه رو انجام بده و میگفت به همین دلیل ممکنه رو بعضی سخت افزار ها برنامه با مشکل روبرو شه. میگفت طریقه صحیح نوشتن کد اینه if a <> 0 then
مثلا چنین کدی اشکال داره؟
if Not a Then به جای if a=0 then در حالی که a اینتجر یا لانگه.
حالا 2 تا سوال دارم.
اول اینکه اون شخص درست میگه یا نه منظورم اینه که ممکنه با تغییر سخت افزار برنامه جواب نده.
دوم این که به نظر شما کدوم روش کد نویسی حرفه ای تر و صحیح تر است.
۱۷-شهریور-۱۳۸۵, ۰۸:۴۸:۵۸
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #2
RE: میشه اینتجر رو بولین در نظر گرفت
سلام.
کسی جوابشو نمیدونه؟
۱۸-شهریور-۱۳۸۵, ۱۵:۳۲:۰۹
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #3
RE: میشه اینتجر رو بولین در نظر گرفت
دوست من سلام

صحبتهای اون شخص تا حد زیادی درسته ! VB در جایی مثل if a then میاد و متغیر a رو به Boolean تبدیل میکنه و طبق گفته مایکروسافت این تبدیل نوع ( و همچنین برعکسش ) با دقت انجام نخواهد شد چراکه بر خلاف تصور خیلی ها boolen یک نوع داده عددی نیست  . البته بگم که عمل پشت پرده رو کامپایلر VB انجام میده نه سیستم عامل . در واقع در تمام کامپایلر ها دو نوع تبدیل نوع یا coversion وجود داره :
1- implicit یا درونی که توسط خود کامپایلر انجام میشه و نمونه اش هم همین سوال شماست .  
2-explicit یا دستی که برنامه نویس باید بیاد و مشخص بکنه که چه تبدیل نوعی انجام باید بشه مثلا استفاده از توابع val یا str . به عنوان مثال کامپایلر متغیر string رو به عدد بصورت درونی تبدیل نوع نمی کنه و شما باید با کمک توابع تبدیل نوع مثل val اونها رو انجام بدی .

این گفته که اجرای برنامه میتونه رو سخت افزار های مختلف نتایج مختلف داشته باشه درست نیست چون کد ماشینی که تولید میشه یکسانه و تمام مثلا کامپیوتر های IBM روشهای مشابهی برای اجرا برنامه و  ذخیره انواع داده دارند . این مشکل فقط میتونه در کتابخونه های مختلف مشکل بوجود بیاره . مثلا برنامه ای رو شما توی VB 6 نوشتی و وقتی همون رو به VB.Net تبدیل می کنی بعلتی که Net. روشهای متفاوتی رو برای تبدیل بکار میگیره ، میتونه نتایح مختلفی رو از خودش نشون بده . مایکروسافت هم در این باره می گه :
keep in mind that the .NET Framework conversion methods do not always produce the same results as the Visual Basic conversion keywords. This is because the Visual Basic conversion retains behavior compatible with previous versions

... این نکته رو بخاطر داشته باشید که تبدیل های .NET Framework همیشه نتایج مشابهی رو مانند توابع تبدیل نوع VB ایجاد نمی کنند . این به این علت هست که توابع تبدیل نوع VB سعی می کنند رفتاری داشته باشند که با نسخه های قدیمی مطابقت کنه .

http://msdn2.microsoft.com/en-us/library/wts33hb3.aspx

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۱۹-شهریور-۱۳۸۵, ۱۵:۰۶:۴۹
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #4
RE: میشه اینتجر رو بولین در نظر گرفت
سلام.
ممنون از توضیحاتت.
من که تا حالا در استفاده از این روش کدنویسی با مشکل روبرو نشده ام. البته به NET. تبدیل نکردم و فقط خود ویبی با این روش خوب جواب داده.
شما فرمودید این تبدیل نوع با دقت انجام نخواهد شد. پس چرا تا به حای برای من مشکلی پیش نیومده. اگه دقتش بالا نیست 1 بارم که شده باید به مشکل بر بخورم.
۱۹-شهریور-۱۳۸۵, ۱۶:۴۱:۰۸
ارسال‌ها
پاسخ
saeedsmk آفلاین
مدیر بخش کرک و کامپیوتر
*****

ارسال‌ها: 506
موضوع‌ها: 74
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 677
( 1179 تشکر در 348 ارسال )
ارسال: #5
RE: میشه اینتجر رو بولین در نظر گرفت
سلام
خوب هستيد
ببنيد تبديلات دقيق نيستند يعني اينكه توي تبديل پيش فرض ممكنه  مشكلي بوجود بيايد . در حالت شما مشكلي ايجاد نميشه ( منظورم وي بي 6 ) چون با استفاده از تابع varbool دقيقا مقدار هاي غير از صفر به يك و مقادير كه فقط صفر هستندبه صفر تبديل ميشه
و درنتيجه مشكلي بوجود نميايد
ولي فرض كنيد شما يك عدد لانگ رو توي متغير اينتيجر بريزيد اگر اين عدد از محدوده اينتيجر يعني -32767  تا 32769 ( اگر مقادير بازه اينتيجر درست يادم مونده باشه )  خارج باشه ممكنه كه عدد به درستي تبديل نشه

منظور مايكروسافت اين نوع از تبديلات داخلي بودند .

اميدوارم كمك كنه

در دنياي كه مرگ شكارچي ان است بايد شكارچي بود - تعليمات دون خوان نوشته كارلوس كاستاندار
(آخرین ویرایش در این ارسال: ۱۹-شهریور-۱۳۸۵, ۱۶:۵۵:۰۸، توسط saeedsmk.)
۱۹-شهریور-۱۳۸۵, ۱۶:۵۴:۰۳
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #6
RE: میشه اینتجر رو بولین در نظر گرفت
سلام.
ممنون از توضیحاتتون.
برای اطمینان میپرسم.
پس اگه a اینتجر باشه و من به جای If a <> 0 then بنویسم if a then و به جای if a =0 then بنویسم if Not a then مشکلی به وجود نمیاد؟
یه سوال دیگه حالا کدوم روش حرفه ای تر و اصولی تره؟
۱۹-شهریور-۱۳۸۵, ۲۰:۲۳:۱۰
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #7
RE: میشه اینتجر رو بولین در نظر گرفت
مشکلی به وجود نمی آد !
ولی حرفه ای تر اینه که خودت تبدیلات رو انجام بدی و کدت رو دقیق بنویسی
که کامپایلر نیاد و خودش تبدیلات رو انجام بده
۱۹-شهریور-۱۳۸۵, ۲۲:۰۱:۰۰
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #8
RE: میشه اینتجر رو بولین در نظر گرفت
سلام.
ممنون خسرو جان.
ممنون از همه دوستان.
۲۰-شهریور-۱۳۸۵, ۱۳:۰۷:۳۸
ارسال‌ها
پاسخ
pashmaloo آفلاین
كاربر دو ستاره
**

ارسال‌ها: 158
موضوع‌ها: 8
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 5
( 80 تشکر در 43 ارسال )
ارسال: #9
RE: میشه اینتجر رو بولین در نظر گرفت
فکر نمیکنیم کامپایلر ویبی برای تبدیل بیاد و کل اینتیجر را بخونه ... و در دستوری مثل if a then - جایی که a یک عدد هست فقط بیت اول خوانده میشود و به جای شرط قرار میگیرد .
حال شما تصور کنین که برای if a=0 عدد صفر با a باید مقایسه شود و جواب آن به دست بیاید و در جای شرط جایگذاری شود ...

به نظر من if a then هم شکیلتر هست و هم سرعت بالاتری دارد ...
دوستان اگر حوصله دارن میتونن یک برنامه بنویسن تا ببینن سرعت کدوم نوع دستور در شرایط یکسان بالاتر است ...


10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که بایناری میفهمند و آنهایی که بایناری نمیفهمند.
۲۰-شهریور-۱۳۸۵, ۱۴:۲۴:۱۵
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #10
RE: میشه اینتجر رو بولین در نظر گرفت
نقل قول: فکر نمیکنیم کامپایلر ویبی برای تبدیل بیاد و کل اینتیجر را بخونه ... و در دستوری مثل if a then - جایی که a یک عدد هست فقط بیت اول خوانده میشود و به جای شرط قرار میگیرد .
حال شما تصور کنین که برای if a=0 عدد صفر با a باید مقایسه شود و جواب آن به دست بیاید و در جای شرط جایگذاری شود ...

به نظر من if a then هم شکیلتر هست و هم سرعت بالاتری دارد ...
دوستان اگر حوصله دارن میتونن یک برنامه بنویسن تا ببینن سرعت کدوم نوع دستور در شرایط یکسان بالاتر است ...

بهترین راه حل اینه که یه فایل اجرایی واسه جفتشون بسازید و بعدش با debugger سورس اسمبلی اونو بخونیم . اونوقته که بهتر میفهمیم که کامپایلر وی بی چه میکنه !


گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۰-شهریور-۱۳۸۵, ۱۸:۱۶:۱۲
ارسال‌ها
پاسخ
amirjan آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,105
موضوع‌ها: 24
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 348
( 697 تشکر در 251 ارسال )
ارسال: #11
RE: میشه اینتجر رو بولین در نظر گرفت
نقل قول: بهترین راه حل اینه که یه فایل اجرایی واسه جفتشون بسازید و بعدش با debugger سورس اسمبلی اونو بخونیم . اونوقته که بهتر میفهمیم که کامپایلر وی بی چه میکنه !
if Not a then
[تصویر:  attachment.php?aid=328]
if a=0 then
[تصویر:  attachment.php?aid=329]

سید امیر حسین حسنینی

Human knowledge belongs to the world ...
۲۱-شهریور-۱۳۸۵, ۰۰:۳۹:۳۰
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ممیزی که با تغییر فونت به ویرگول تبدیل میشه! :-| mabus 3 4,697 ۲۰-شهریور-۱۳۹۲, ۱۰:۴۹:۴۰
آخرین ارسال: mabus
  پکت چیه و چجوری استفاده میشه m_vb66 29 17,882 ۱۵-دى-۱۳۹۱, ۰۴:۲۰:۲۳
آخرین ارسال: ashkan-bdf
  [سوال] فوری = چطوری میشه فایل pdf پسورد دار رو در وی بی باز کرد ؟ ضمنا پسورد رو هم داریم . hadi_127663624 7 6,877 ۱۶-آذر-۱۳۹۰, ۱۵:۱۲:۳۰
آخرین ارسال: Di Di
  پیغام اینتر تو تابع SendMessage چی میشه؟ red11011 12 11,625 ۲۱-اسفند-۱۳۸۹, ۰۰:۱۷:۵۵
آخرین ارسال: GTAexcess
  چطور میشه pictureboxیا toolbar رو move کرد ؟ (آموزش) amir_bwm 4 3,158 ۱۷-فروردین-۱۳۸۸, ۲۰:۰۱:۵۵
آخرین ارسال: rouzbeh_ziafati
  این ارور چه طوری رفع میشه؟ alaska 12 18,385 ۱۶-فروردین-۱۳۸۸, ۱۵:۵۸:۱۶
آخرین ارسال: HoseinVig
  چطوری میشه عمودی نوشت؟ alaska 12 9,506 ۱۵-فروردین-۱۳۸۸, ۲۳:۵۱:۰۵
آخرین ارسال: alaska
  سوال چطور میشه از یک Winsock برای لاگین کردن 5 آیدی استفاده djboy 4 3,749 ۲۷-مرداد-۱۳۸۷, ۲۲:۳۷:۵۸
آخرین ارسال: far_222000
  چطور میشه RichTextBox رو کاملا راست به چپ کرد؟ amir_bwm 7 8,749 ۱۱-اردیبهشت-۱۳۸۷, ۰۲:۳۱:۴۹
آخرین ارسال: CRazYFULL
  چه جوری میشه یه برنامه رو در برنامه دیگه ادغام کرد meisambandari 9 5,946 ۲۵-اسفند-۱۳۸۶, ۱۹:۳۶:۳۴
آخرین ارسال: godvb

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS