সংক্ষিপ্ত IFবিবৃতি
IF বিবৃতি বরং ব্যয়বহুল, এবং এগুলি নিচে গল্ফ করা অনেকগুলি বাইট সংরক্ষণ করতে পারে।
নিম্নলিখিতটি বিবেচনা করুন ( এরিক দ্য আউটগল্ফার উত্তর থেকে অভিযোজিত ):
IF RND<.5THEN
x=x-1
a(i)=1
ELSE
y=y-1
a(i)=0
ENDIF
প্রথম কাজটি আমরা করতে পারি তা হ'ল ENDIFএকক লাইন IFবিবৃতি ব্যবহার করে :
IF RND<.5THEN x=x-1:a(i)=1ELSE y=y-1:a(i)=0
এটি ততক্ষণ কাজ করে যতক্ষণ আপনি এটিকে অন্য কোনও কিছুর মতো একই লাইনে রাখার চেষ্টা না করেন। বিশেষত, যদি আপনার নেস্টেড IFবিবৃতি থাকে তবে কেবলমাত্র অন্তর্দিকের এক-রেখাযুক্ত হতে পারে।
তবে এই ক্ষেত্রে, আমরা IFসম্পূর্ণরূপে গণিত ব্যবহার করে নির্মূল করতে পারি । আমরা আসলে যা চাই তা বিবেচনা করুন:
- যদি
RND<.5সত্য হয় ( -1), আমরা চাই:
x 1 দ্বারা হ্রাস করতে
y একই থাকতে
a(i) 1 হয়ে
- অন্যথায়, যদি
RND<.5মিথ্যা হয় ( 0), আমরা চাই:
x একই থাকতে
y 1 দ্বারা হ্রাস করতে
a(i) 0 হতে
এখন যদি আমরা একটি পরিবর্তনশীল মধ্যে (শর্তসাপেক্ষ ফল সংরক্ষণ r=RND<.5), আমরা নতুন মান নিরূপণ করতে পারেন x, yএবং a(i):
- যখন
rহয় -1, x=x-1; যখন rহয় 0, x=x+0।
- যখন
rহয় -1, y=y+0; যখন rহয় 0, y=y-1।
- যখন
rহয় -1, a(i)=1; যখন rহয় 0, a(i)=0।
সুতরাং আমাদের চূড়ান্ত কোডটি দেখে মনে হচ্ছে:
r=RND<.5
x=x+r
y=y-1-r
a(i)=-r
আসল সংস্করণে পুরো 20 বাইট (40%) সঞ্চয় করা।
গাণিতিক পদ্ধতিটি আশ্চর্যজনকভাবে প্রায়শই প্রয়োগ করা যেতে পারে, তবে যখন দুটি মামলার মধ্যে যুক্তির মধ্যে পার্থক্য রয়েছে (উদাহরণস্বরূপ যখন আপনাকে কোনও ক্ষেত্রে কিছু ইনপুট করতে হবে তবে অন্য ক্ষেত্রে নয়) তখনও আপনাকে ব্যবহার করতে হবে IF।