আপনার অসীম লুপটি ছোট করুন
যখন আপনাকে একটি অসীম লুপ ব্যবহার করতে হবে, আপনি এ ব্যবহার করার কথা ভাবতে পারেন while
তবে পরিবর্তে একটি লেবেল ব্যবহার করা 2 বাইট দ্বারা সংক্ষিপ্ত হবে:
while''do end
::a::goto a
যতটা সম্ভব কম স্থান ব্যবহার করুন
আপনার কোড থেকে আরও শূন্যস্থান সরাতে আপনি (আব) ব্যবহার করতে পারেন এমন একটি সাধারণ জিনিস রয়েছে। লুয়ার চশমা আপনি ভেরিয়েবলগুলিকে যে নাম দিবেন সে সম্পর্কে স্পষ্ট: তাদের একটি চিঠি দিয়ে শুরু করতে হবে। এটি বোঝায় যে, কখনও কখনও আপনি সংখ্যা এবং ফাংশন / ভেরিয়েবলের মধ্যে ফাঁকা স্থান ছেড়ে যেতে পারেন
x=0>1 and 0or 1print(x)
স্থানটি সরিয়ে নেওয়ার সম্ভাবনাটি সংখ্যাটির পরে থাকা চিঠির উপর নির্ভর করে, এই চিঠিটি আপনাকে এটি করতে দেয় না:
a,b,c,d,e,f -- They would be interpreted as hexadecimal
x -- only fail when after a 0, other number are fine
-- (0x indicates the following is an hexadecimal number)
এটি ব্যবহার করে এবং আপনি কীভাবে আপনার ভেরিয়েবলগুলিকে কল করেন সেদিকে মনোনিবেশ করে আপনি আপনার উত্স কোডগুলির বেশিরভাগ স্থানকে মুক্ত করতে পারেন।
ইতিমধ্যে এখানে একটি উদাহরণ তুলে নেওয়া, এবং এই পরামর্শটি ব্যবহার করে, আপনি শেভ করতে পারেন এমন আরও একটি বাইট এখানে :)
print(a and-1 or-2)
print(a and-1or-2)
সঠিক ইনপুট পদ্ধতিটি ব্যবহার করুন
আমরা যদি বয়লারপ্লেটটি দেখে এবং প্রতিটি বড় ধরণের ইনপুটটির জন্য ব্যয় করি তবে আমাদের যা আছে তা এখানে:
function f(x)x end
io.read()
arg[1]
এই পদ্ধতির প্রত্যেকটি আমাদের সবচেয়ে বেশি ব্যয়যুক্ত ফাংশনটির সাথে 1 টি ইনপুট নিতে দেয় (তবে আমাদের ইনপুট হিসাবে একটি টেবিল নিতে দেয়)
আমরা এখন দেখতে পাচ্ছি যে কমান্ড-লাইন আর্গুমেন্টটি ব্যবহার করা যদি আপনি গল্ফ করতে চান তবে যেতে হবে তবে সচেতন হন: এটি আরও খাটো হতে পারে
arg[1]
...
...
Lua একটু বিশেষ, এটি একটি ভেরিয়েবলের প্যাক না সামগ্রী সমন্বিত এর arg
, অথবা একটি variadic ফাংশন ক্ষেত্রে প্যাক না প্যারামিটার।
যখন আপনাকে একাধিক ইনপুট পেতে হবে এবং সেগুলির প্রতিটি ব্যবহার করতে হবে তখন তাদের পরিবর্তনশীলে সংরক্ষণ করা ভাল। ভেরিয়েবলগুলিতে 2 ইনপুট সংরক্ষণের কিছু উপায় এখানে রয়েছে
a=arg[1]b=arg[2] -- highly un-efficient, costs 8 bytes by variable
a,b=unpack(arg) -- costs 15, but at least doesn't depends on the number of argument
a,b=... -- only costs 7
এবং এখানে ভেরিয়েবলগুলি ছাড়াই আপনি সংক্ষিপ্ততম কল করতে পারেন:
... -- using a allow a gain of 1-2 bytes at each use
arg[2] -- using b allow a gain of 4-5 bytes at each use
যেখানে আপনার 3 টি যুক্তি রয়েছে, বা যখন আপনি 2 টি যুক্তি ব্যবহার করেন, তার সাথে দুটি ব্যবহার করা হয়, আপনি ইতিমধ্যে বাইটগুলি পেয়ে যাচ্ছেন a,b=...
! :)
প্রায় কখনই ব্যবহার না করলে!
যদি / ifif / if বিবৃতি ব্যবহারের ক্ষেত্রে কোনও স্ত্রনীর চেয়ে কম খরচ হয় তবে এরকম কোনও ঘটনা নেই near এই জাতীয় বিবৃতি দেওয়ার জন্য বয়লারপ্লেটটি সত্যই ভারী:
-- exemple with dumb values
if 1>0then v=1 else v=0 end
v=1>0 and 1or 0
একটি সাধারণ উদাহরণ সহ, আপনি ইতিমধ্যে 12 বাইট সংরক্ষণ করেছেন, যখন আপনাকে অন্য কিছু করতে হবে, এটি আরও এবং আরও গুরুত্বপূর্ণ হয়ে ওঠে, তাই সে সম্পর্কে সচেতন হন!
এছাড়াও, লুয়ার অংশগুলি বিশেষ , তারা কীভাবে কাজ করে তার কিছু শর্ত রয়েছে, আগ্রহীদের জন্য, আমি এটি নীচে ব্যাখ্যা করব:
লুয়ার টেরিনারিগুলি ফর্মের <condition> and <case true: have to be a true value> or <case false: can be anything>
প্রথমত, আসুন সত্যের টেবিলটি দেখুন or
। একটি or
একটি ফাংশন হিসাবে বিবেচিত হতে পারে: এটা সর্বদা কোন মান ফিরিয়ে, এখানে মান এটা ফেরৎ দেওয়া হল:
x | y ||x or y
------||-------
0 | 0 || y
0 | 1 || y
1 | 0 || x
1 | 1 || x
এটিই আমাদের আমাদের তিনটি নির্মাণের অনুমতি দেয়।
and
যা আমাদের অবস্থা মূল্যায়ন করার অনুমতি দেয়, এটা সবসময় ফিরে আসবে y
যদি x and y
মূল্যায়ন সত্যতে।
এটির সাথে সমস্যাটি হ'ল এটি ব্যর্থ হবে যদি আমরা চাই nil
বা false
শর্তের পরে ফিরে আসি false
। উদাহরণস্বরূপ, শর্তটি সত্য হওয়া সত্ত্বেও নিম্নলিখিতগুলি সর্বদা 5 টি ফিরে আসবে।
v = true and false or 5
এটি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য এখানে একটি ত্রৈমাসিকের ধাপে ধাপে মূল্যায়ন করা (আপনি যখন তাদের বাসা বাঁধতে হবে তখন এটি কার্যকর হবে :))
-- let's use our dumb ternary
= true and false or 5
-- and statement will be evaluated first, leading to
= false or 5
-- and we saw how the or works
= 5