CoffeeScript-এ Comprehensions এবং Generators দুটি শক্তিশালী বৈশিষ্ট্য রয়েছে যা অ্যারে, অবজেক্ট এবং অন্যান্য ডেটা স্ট্রাকচারগুলোর ওপর কার্যকরী অপারেশন করতে সাহায্য করে। এই দুটি কনসেপ্ট JavaScript-এ আরও জটিল এবং ভারী কোড লেখার প্রয়োজনীয়তা কমিয়ে দেয় এবং কোডকে আরও পরিষ্কার ও কার্যকর করে তোলে।
1. Comprehensions in CoffeeScript
Comprehensions CoffeeScript-এ অ্যারে বা তালিকা থেকে নতুন উপাদান তৈরি করতে ব্যবহৃত হয়। এটি for লুপের মতো কাজ করে তবে এটি আরও সংক্ষিপ্ত এবং কোড লেখাকে সহজ করে তোলে। CoffeeScript-এ অ্যারে comprehension, object comprehension এবং generator comprehension সহ একাধিক ধরনের comprehension ব্যবহৃত হতে পারে।
1.1 Array Comprehensions
Array comprehension CoffeeScript-এ একটি সংক্ষিপ্ত এবং কার্যকরী পদ্ধতি যেটি অ্যারের উপর বিভিন্ন অপারেশন যেমন ফিল্টার, ম্যাপিং এবং ট্রান্সফর্মেশন করার জন্য ব্যবহৃত হয়।
উদাহরণ: সাধারণ অ্যারে কম্প্রিহেনশন
squares = (x * x for x in [1..5])
console.log squares # [1, 4, 9, 16, 25]
এখানে, [1..5] একটি রেঞ্জ তৈরি করছে এবং x * x প্রতিটি উপাদানের জন্য একটি নতুন ফলাফল তৈরি করছে। এটি JavaScript-এ এইভাবে রূপান্তরিত হবে:
JavaScript Equivalent:
var squares = [];
for (var i = 1; i <= 5; i++) {
squares.push(i * i);
}
console.log(squares); // [1, 4, 9, 16, 25]
1.2 Array Comprehensions with Conditions (শর্তসহ)
আপনি শর্ত সহ অ্যারে comprehension করতে পারেন, যেমন একটি নির্দিষ্ট মান ফিল্টার করা।
উদাহরণ: ৫-এর বেশি সংখ্যা নির্বাচন
numbers = [1, 2, 3, 6, 7, 8]
greater_than_five = (x for x in numbers when x > 5)
console.log greater_than_five # [6, 7, 8]
এখানে, when x > 5 শর্তের মাধ্যমে কেবলমাত্র ৫-এর বেশি সংখ্যাগুলিকে নির্বাচন করা হচ্ছে। JavaScript-এ এটি এইভাবে রূপান্তরিত হবে:
JavaScript Equivalent:
var numbers = [1, 2, 3, 6, 7, 8];
var greater_than_five = numbers.filter(function(x) { return x > 5; });
console.log(greater_than_five); // [6, 7, 8]
1.3 Object Comprehensions
CoffeeScript-এ শুধু অ্যারে নয়, অবজেক্টের ক্ষেত্রেও comprehension ব্যবহার করা যেতে পারে। এটি সাধারণত কী-ভ্যালু পেয়ার থেকে নতুন অবজেক্ট তৈরি করতে ব্যবহৃত হয়।
উদাহরণ: অবজেক্ট comprehension
person = {name: "Alice", age: 30, city: "New York"}
keys = (key for key, value in person)
console.log keys # ["name", "age", "city"]
এখানে, CoffeeScript অবজেক্টের কী গুলি নিয়ে একটি অ্যারে তৈরি করছে। এটি JavaScript-এ এইভাবে রূপান্তরিত হবে:
JavaScript Equivalent:
var person = {name: "Alice", age: 30, city: "New York"};
var keys = Object.keys(person);
console.log(keys); // ["name", "age", "city"]
2. Generators in CoffeeScript
Generators CoffeeScript (এবং JavaScript) এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা বিশেষভাবে দীর্ঘ সময় ধরে চলা বা বড় ডেটা সেটের সাথে কাজ করার জন্য উপযোগী। Generators এমন ফাংশন যা সাসপেন্ড (pause) হতে পারে এবং পরে পুনরায় চলতে পারে। এটি কার্যকরীভাবে একটি ডেটা স্ট্রিমের উপর কাজ করে এবং একসাথে সমস্ত ডেটা লোড না করে প্রতিবার একটি করে মান প্রদান করে।
2.1 Generator Function
CoffeeScript-এ generator function তৈরি করতে -> এর পরিবর্তে => ব্যবহার করা হয় এবং yield কিওয়ার্ড দিয়ে মান ফেরত পাঠানো হয়।
উদাহরণ: Generator function
gen = =>
yield "First"
yield "Second"
yield "Third"
genObj = gen()
console.log genObj.next().value # "First"
console.log genObj.next().value # "Second"
console.log genObj.next().value # "Third"
এখানে, gen একটি generator function এবং yield কিওয়ার্ডটির মাধ্যমে একে একে মানগুলো প্রদান করা হচ্ছে।
2.2 Generator with a Loop
একটি লুপের মাধ্যমে generator ব্যবহার করতে পারেন, যাতে আপনি পরবর্তী মানগুলি একে একে next() পদ্ধতি দিয়ে পেতে পারেন।
উদাহরণ: Generator with loop
countUp = (n) ->
for i in [1..n]
yield i
genObj = countUp(5)
console.log genObj.next().value # 1
console.log genObj.next().value # 2
console.log genObj.next().value # 3
console.log genObj.next().value # 4
console.log genObj.next().value # 5
এখানে, countUp একটি generator ফাংশন যা একে একে ১ থেকে ৫ পর্যন্ত মান প্রদান করছে।
2.3 Infinite Generator (অসীম generator)
একটি অসীম সংখ্যা উৎপন্ন করার জন্য generator ব্যবহার করা যেতে পারে।
উদাহরণ: Infinite Generator
gen = =>
i = 0
while true
yield i
i += 1
genObj = gen()
console.log genObj.next().value # 0
console.log genObj.next().value # 1
console.log genObj.next().value # 2
এখানে, gen একটি অসীম সংখ্যার generator যা একের পর এক সংখ্যা উৎপন্ন করে।
3. Comprehensions এবং Generators-এর পার্থক্য
| বৈশিষ্ট্য | Comprehensions | Generators |
|---|---|---|
| ফাংশনের ধরন | একটি এক্সপ্রেশন হিসেবে ফাংশন ডিফাইন করা হয় | একটি ফাংশন যা yield কিওয়ার্ড ব্যবহার করে |
| ডেটা প্রসেসিং | একযোগে সমস্ত ডেটা প্রসেস করা হয় | একে একে ডেটা প্রদান করা হয় (Lazy evaluation) |
| ব্যবহার | অ্যারে বা অবজেক্টের উপর ম্যাপ, ফিল্টার অথবা লুপ করা | দীর্ঘ লিস্ট বা স্ট্রিম ডেটার জন্য ব্যবহৃত হয় |
সারাংশ
- Comprehensions CoffeeScript-এ কোডকে আরও সংক্ষিপ্ত এবং কার্যকর করে তোলে, বিশেষত অ্যারে বা অবজেক্টের উপাদানগুলির উপর অপারেশন করার ক্ষেত্রে।
- Generators CoffeeScript-এ ডেটা প্রসেসিংয়ের জন্য একটি শক্তিশালী পদ্ধতি, যা একে একে ডেটা প্রদান করে এবং বড় ডেটা সেটের উপর কাজ করতে সহায়ক।
এভাবে CoffeeScript এর Comprehensions এবং Generators দুটি বৈশিষ্ট্য কোডিংকে আরও কার্যকরী, দ্রুত এবং পরিষ্কার করে তোলে।
Array Comprehensions এবং Object Comprehensions CoffeeScript-এর এমন শক্তিশালী বৈশিষ্ট্য যা আপনাকে অ্যারে বা অবজেক্টের উপাদানগুলো খুব সহজভাবে ফিল্টার, ম্যাপ, এবং ট্রান্সফর্ম করতে সাহায্য করে। এগুলোর মাধ্যমে আপনি কোড আরও সংক্ষিপ্ত এবং পরিষ্কারভাবে লিখতে পারেন। এখানে আমরা CoffeeScript-এ Array এবং Object Comprehensions-এর ব্যবহার বিস্তারিতভাবে আলোচনা করবো।
Array Comprehensions
CoffeeScript-এ Array Comprehensions একটি কোডের এক লাইনেই অ্যারে তৈরি করতে সক্ষম করে, যা ফিল্টার, ম্যাপিং এবং লুপিং কার্যকলাপ একত্রিত করে। এটি JavaScript-এ .map(), .filter() এবং .reduce() মেথডের মতো কাজ করে।
সাধারণ Array Comprehension:
squares = (x * x for x in [1..5])
console.log squares # [1, 4, 9, 16, 25]
এখানে:
[1..5]একটি রেঞ্জ যা ১ থেকে ৫ পর্যন্ত মান তৈরি করে।x * xএক্সপ্রেশনটি প্রতিটি উপাদানে প্রয়োগ হয় এবং তার বর্গ বের করা হয়।
JavaScript-এ কম্পাইল হওয়া কোড:
var squares;
squares = (function() {
var i, ref, results;
results = [];
for (i = 1, ref = 5; i <= ref; i++) {
results.push(i * i);
}
return results;
})();
console.log(squares); // [1, 4, 9, 16, 25]
Array Comprehensions: শর্ত সহ
Array comprehension-এ আপনি সহজেই শর্ত যোগ করতে পারেন, যেমন .filter() মেথডে যা করা যায়। এটি আপনাকে নির্দিষ্ট শর্তে উপাদান নির্বাচন করতে সহায়ক।
উদাহরণ: ৫ এর বড় সংখ্যা নির্বাচন করা
numbers = [1, 2, 3, 6, 7, 8]
greater_than_five = (x for x in numbers when x > 5)
console.log greater_than_five # [6, 7, 8]
এখানে when x > 5 শর্তটি ব্যবহৃত হয়েছে, যার মাধ্যমে কেবলমাত্র ৫ এর বড় সংখ্যাগুলিই নির্বাচন করা হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var numbers, greater_than_five;
numbers = [1, 2, 3, 6, 7, 8];
greater_than_five = (function() {
var i, len, results;
results = [];
for (i = 0, len = numbers.length; i < len; i++) {
if (numbers[i] > 5) {
results.push(numbers[i]);
}
}
return results;
})();
console.log(greater_than_five); // [6, 7, 8]
Array Comprehensions: Multiple Conditions
CoffeeScript-এ একাধিক শর্ত (Multiple Conditions) ব্যবহার করে Array comprehension তৈরি করা খুবই সহজ।
উদাহরণ: ৫ এর ছোট এবং দ্বীপক্ষের সংখ্যা নির্বাচন করা
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
filtered = (x for x in numbers when x < 5 and x % 2 == 1)
console.log filtered # [1, 3]
এখানে x < 5 and x % 2 == 1 শর্তটি ব্যবহৃত হয়েছে, যার মাধ্যমে ৫ এর ছোট এবং মৌলিক সংখ্যা (অর্থাৎ ১, ৩) নির্বাচন করা হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var numbers, filtered;
numbers = [1, 2, 3, 4, 5, 6, 7, 8];
filtered = (function() {
var i, len, results;
results = [];
for (i = 0, len = numbers.length; i < len; i++) {
if (numbers[i] < 5 && numbers[i] % 2 === 1) {
results.push(numbers[i]);
}
}
return results;
})();
console.log(filtered); // [1, 3]
Object Comprehensions
Object Comprehensions CoffeeScript-এ অ্যারে কম্প্রিহেনশন এর মতোই কাজ করে, কিন্তু এটি অবজেক্টের কী এবং মানগুলোর উপর ভিত্তি করে নতুন অবজেক্ট তৈরি করতে ব্যবহৃত হয়। এটি আপনাকে কী-ভ্যালু জোড়া নিয়ে নতুন অবজেক্ট তৈরি করতে দেয়।
উদাহরণ: Object Comprehension
person = {name: "Alice", age: 30, city: "New York"}
keys = (key for key, value in person)
console.log keys # ["name", "age", "city"]
এখানে key for key, value in person অবজেক্টের সকল কী-এর নাম সংগ্রহ করছে এবং একটি অ্যারে তৈরি করছে। ফলস্বরূপ, ["name", "age", "city"] একটি অ্যারে তৈরি হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var person, keys;
person = {name: "Alice", age: 30, city: "New York"};
keys = (function() {
var i, results;
results = [];
for (i in person) {
if (person.hasOwnProperty(i)) {
results.push(i);
}
}
return results;
})();
console.log(keys); // ["name", "age", "city"]
Object Comprehensions: শর্ত সহ
Object Comprehensions-এ শর্তও ব্যবহার করা যেতে পারে, যেমন আপনি শুধু নির্দিষ্ট মানের সাথে মিলে এমন কী-ভ্যালু জোড়া নির্বাচন করতে পারেন।
উদাহরণ: বয়স ৩০-এর বেশি যাদের নাম নির্বাচন করা
people = {Alice: 30, Bob: 25, Charlie: 35}
olderThan30 = (key for key, value in people when value > 30)
console.log olderThan30 # ["Charlie"]
এখানে when value > 30 শর্তটি ব্যবহৃত হয়েছে, যার মাধ্যমে কেবলমাত্র ৩০ বছরের বেশি বয়সের নাম নির্বাচন করা হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var people, olderThan30;
people = {Alice: 30, Bob: 25, Charlie: 35};
olderThan30 = (function() {
var i, results;
results = [];
for (i in people) {
if (people.hasOwnProperty(i) && people[i] > 30) {
results.push(i);
}
}
return results;
})();
console.log(olderThan30); // ["Charlie"]
সারাংশ
- Array Comprehensions: CoffeeScript-এ Array comprehension অত্যন্ত শক্তিশালী, যা আপনাকে অ্যারে তৈরি এবং উপাদানগুলোকে ফিল্টার, ম্যাপ বা ট্রান্সফর্ম করতে দেয়।
- Object Comprehensions: Object comprehension CoffeeScript-এ অবজেক্টের কী-ভ্যালু জোড়া থেকে নতুন অ্যারে বা অবজেক্ট তৈরি করতে সাহায্য করে।
- শর্তযুক্ত কম্প্রিহেনশন: CoffeeScript-এ শর্ত ব্যবহার করে খুব সহজে আপনার অ্যারে বা অবজেক্টে থাকা নির্দিষ্ট মান নির্বাচন করা যায়।
এই কৌশলগুলি CoffeeScript-এ কোড লেখাকে আরও কার্যকরী এবং সংক্ষিপ্ত করে তোলে, এবং জটিল ডেটা ট্রান্সফর্মেশন এবং ফিল্টারিং সহজ করে দেয়।
Generators হল JavaScript এর একটি বৈশিষ্ট্য যা ফাংশনকে ইটারেবল (iterable) বা সাসপেন্ড (suspend) করতে সাহায্য করে, অর্থাৎ একটি ফাংশন execution-এর মাঝে কিছু সময়ের জন্য থামিয়ে রাখতে পারে এবং পরবর্তীতে আবার চালু করা যায়। CoffeeScript-এ generators একটি শক্তিশালী ফিচার, যেটি অ্যাসিঙ্ক্রোনাস কোড এবং সিকোয়েন্সাল অপারেশনগুলোর জন্য খুবই উপকারী।
Generators কি?
Generators হল ফাংশন যা execution থামিয়ে দিতে পারে এবং পরে পুনরায় চালু করতে পারে। JavaScript-এ, function* কিওয়ার্ড এবং yield কিওয়ার্ড ব্যবহার করে generators তৈরি করা হয়। CoffeeScript-এ এটি আরও সংক্ষিপ্ত এবং সহজভাবে ব্যবহৃত হয়।
yield কিওয়ার্ড একটি ফাংশন execution থামাতে ব্যবহৃত হয় এবং এটি পরবর্তীতে পুনরায় চালু করা সম্ভব হয়।
CoffeeScript-এ Generators এর ব্যবহার
CoffeeScript-এ generators ব্যবহার করতে gen কিওয়ার্ড এবং yield কিওয়ার্ড ব্যবহার করা হয়।
উদাহরণ: একটি সাধারণ Generator ফাংশন
gen = ->
yield 1
yield 2
yield 3
g = gen()
console.log g.next().value # 1
console.log g.next().value # 2
console.log g.next().value # 3
এখানে:
genএকটি generator ফাংশন, যেখানেyieldকিওয়ার্ড দ্বারা মানগুলি এক এক করে ফেরত দেওয়া হচ্ছে।g.next().valueব্যবহার করে আমরা পরবর্তী মানটি পেতে পারি, এবং এভাবে আমরা generator ফাংশন থেকে প্রতিটি মান বের করতে পারি।
JavaScript-এ কম্পাইল হওয়া কোড:
var g, gen;
gen = function() {
return (function() {
switch (arguments.length) {
case 0:
return 1;
case 1:
return 2;
case 2:
return 3;
}
}).apply(this, arguments);
};
g = gen();
console.log(g.next().value); // 1
console.log(g.next().value); // 2
console.log(g.next().value); // 3
Generator Function এর বৈশিষ্ট্য
yieldকিওয়ার্ড: ফাংশন execution থামানোর জন্যyieldকিওয়ার্ড ব্যবহার করা হয়।yieldফাংশনকে একটি মান ফেরত দেয় এবং execution এর পরবর্তী সময়ে চালু হওয়ার জন্য স্টেট সংরক্ষণ করে রাখে।next()মেথড: Generator ফাংশন যখন কল করা হয়, তখন এটি একটি iterator অবজেক্ট রিটার্ন করে। এরnext()মেথড কল করা হলে, ফাংশন execution পরবর্তীyieldপর্যন্ত পৌঁছায় এবং সেই মানটি রিটার্ন হয়।doneপ্রপার্টি:next()মেথড একটি অবজেক্ট রিটার্ন করে যাvalue(ফাংশন থেকে ফেরত আসা মান) এবংdone(ফাংশন সম্পূর্ণ হয়েছে কিনা) প্রপার্টি ধারণ করে। যখন ফাংশন সবyieldপয়েন্ট পার হয়ে শেষ হয়, তখনdonetrue হয়।
উদাহরণ: done প্রপার্টি সহ Generator
gen = ->
yield 1
yield 2
yield 3
g = gen()
console.log g.next() # { value: 1, done: false }
console.log g.next() # { value: 2, done: false }
console.log g.next() # { value: 3, done: false }
console.log g.next() # { value: undefined, done: true }
এখানে:
doneপ্রপার্টি true হয়ে যাবে যখন generator ফাংশন সবyieldসম্পন্ন করবে।
CoffeeScript-এ Generator এবং Asynchronous Code
Generator ফাংশনকে অ্যাসিঙ্ক্রোনাস অপারেশনগুলির সাথে ব্যবহার করা খুবই উপকারী, বিশেষ করে প্যারালেল অপারেশন বা অ্যাসিঙ্ক্রোনাস কোড চালাতে। এর মাধ্যমে আপনি সিঙ্ক্রোনাসভাবে কোড লিখতে পারেন যা আসলে অ্যাসিঙ্ক্রোনাস।
উদাহরণ: অ্যাসিঙ্ক্রোনাস অপারেশনগুলির সাথে Generator ব্যবহার
fetchData = (url) ->
# অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে কিছু ডেটা ফেচ করার কোড
gen = ->
console.log "Start"
yield fetchData('url1')
console.log "Middle"
yield fetchData('url2')
console.log "End"
g = gen()
g.next() # প্রথম yield এ থামবে
g.next() # দ্বিতীয় yield এ থামবে
এখানে, fetchData অ্যাসিঙ্ক্রোনাস ফাংশন এবং gen ফাংশন এর মধ্যে yield ব্যবহার করা হয়েছে। yield ফাংশনকে থামিয়ে দেয় এবং পরবর্তী কলের জন্য অপেক্ষা করে।
সারাংশ
Generators CoffeeScript-এ একটি শক্তিশালী টুল যা ফাংশনকে সাসপেন্ড বা থামিয়ে দেয় এবং পরবর্তীতে আবার চালু করতে সাহায্য করে। এটি বিশেষভাবে অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করতে এবং সিকোয়েন্সাল অপারেশনগুলো সিমুলেট করতে কার্যকরী। yield কিওয়ার্ড দ্বারা ফাংশন থামানো হয় এবং next() মেথডের মাধ্যমে পরবর্তী মান বা ফাংশন চালু করা হয়। CoffeeScript-এ এটি খুবই সংক্ষিপ্ত এবং পরিষ্কারভাবে ব্যবহৃত হয়।
Iterables এবং Iterators হল এমন ধারণা যা JavaScript এবং CoffeeScript-এর মতো ভাষায় коллекশন বা অ্যারে থেকে উপাদানগুলিকে পুনরায় আনা এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। CoffeeScript, JavaScript-এর মতো, Iterable এবং Iterator এর মাধ্যমে একটি সংগ্রহের (যেমন অ্যারে, অবজেক্ট) উপর লুপ করা সম্ভব। এখানে আমরা CoffeeScript-এ Iterables এবং Iterators এর ব্যবহার বিস্তারিতভাবে আলোচনা করব।
Iterable কী?
Iterable হল এমন একটি অবজেক্ট যেটি Iterator তৈরি করতে সক্ষম, যা উপাদান এক এক করে ইটারেট (অথবা রিটার্ন) করে। একে একটি নির্দিষ্ট ইন্টারফেস (যেমন Symbol.iterator) অনুসরণ করতে হয়, এবং এটি একটি for...of লুপ বা অন্যান্য ইটারেশন মেকানিজমের মাধ্যমে ট্রাভার্স করা যেতে পারে।
CoffeeScript-এ, যেকোনো অ্যারে বা অবজেক্ট সাধারণত Iterable হিসাবে ব্যবহৃত হতে পারে।
উদাহরণ: Iterable ব্যবহার
names = ["Alice", "Bob", "Charlie"]
for name in names
console.log name
এখানে names অ্যারেটি একটি Iterable, এবং for...in লুপের মাধ্যমে এটি ট্রাভার্স করা হচ্ছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var names;
names = ["Alice", "Bob", "Charlie"];
for (name of names) {
console.log(name);
}
Iterator কী?
Iterator হল একটি অবজেক্ট যা একটি next() মেথড প্রদান করে, যার মাধ্যমে পরবর্তী মান (বা উপাদান) পাওয়া যায়। Iterator সাধারণত একটি Iterable অবজেক্টের মাধ্যমে তৈরি হয় এবং এটি next() মেথড দিয়ে মান ফেরত দেয় যতক্ষণ না অবশেষে এটি done: true রিটার্ন করে।
Iterable এবং Iterator এর সম্পর্ক:
- Iterable: একটি অবজেক্ট যা Iterator তৈরি করতে সক্ষম।
- Iterator: একটি অবজেক্ট যা next() মেথড প্রদান করে, যা একে একে উপাদান ফেরত দেয়।
উদাহরণ: Iterator ব্যবহার
names = ["Alice", "Bob", "Charlie"]
iterator = names[Symbol.iterator]()
console.log iterator.next() # { value: "Alice", done: false }
console.log iterator.next() # { value: "Bob", done: false }
console.log iterator.next() # { value: "Charlie", done: false }
console.log iterator.next() # { value: undefined, done: true }
এখানে names[Symbol.iterator()] একটি iterator তৈরি করছে এবং next() মেথডের মাধ্যমে উপাদানগুলো পুনরায় ফেরত দিচ্ছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var names, iterator;
names = ["Alice", "Bob", "Charlie"];
iterator = names[Symbol.iterator]();
console.log(iterator.next()); // { value: "Alice", done: false }
console.log(iterator.next()); // { value: "Bob", done: false }
console.log(iterator.next()); // { value: "Charlie", done: false }
console.log(iterator.next()); // { value: undefined, done: true }
CoffeeScript-এ Iterable এবং Iterator এর ব্যবহার
১. Array Iterables
CoffeeScript-এ একটি অ্যারে একটি Iterable অবজেক্ট, যার মধ্যে আমরা for...in বা for...of লুপ ব্যবহার করে উপাদানগুলো ট্রাভার্স করতে পারি।
fruits = ["Apple", "Banana", "Orange"]
for fruit in fruits
console.log fruit
২. Object Iterables
CoffeeScript-এ একটি অবজেক্টের উপাদান ইটারেট করতে হলে, for...in লুপ ব্যবহার করা হয়। তবে, অবজেক্টে Symbol.iterator নেই, তাই এটা ইন্টারফেসের মাধ্যমে ইটারেট করা সম্ভব নয়। তবে, আপনি এর কীগুলি বা মানগুলো ইটারেট করতে পারেন।
person = name: "Alice", age: 30, city: "New York"
for key, value of person
console.log "#{key}: #{value}"
JavaScript-এ কম্পাইল হওয়া কোড:
var person;
person = { name: "Alice", age: 30, city: "New York" };
for (key in person) {
value = person[key];
console.log(key + ": " + value);
}
Iterator ব্যবহার: কাস্টম Iterable তৈরি
আপনি নিজের Iterable অবজেক্ট তৈরি করতে পারেন যেটি একটি Iterator প্রদান করবে। এটি করার জন্য, আপনি Symbol.iterator মেথড ব্যবহার করতে পারেন।
উদাহরণ: কাস্টম Iterable তৈরি
class MyRange
constructor: (@start, @end) ->
[Symbol.iterator]: ->
value = @start
return
next: ->
if value <= @end
result = { value: value, done: false }
value += 1
return result
else
return { value: undefined, done: true }
range = new MyRange(1, 5)
for num in range
console.log num
এখানে, MyRange ক্লাসটি একটি কাস্টম Iterable তৈরি করেছে যা ১ থেকে ৫ পর্যন্ত সংখ্যাগুলি next() মেথডের মাধ্যমে ইটারেট করে।
JavaScript-এ কম্পাইল হওয়া কোড:
var MyRange, range;
MyRange = class MyRange {
constructor(start, end) {
this.start = start;
this.end = end;
}
[Symbol.iterator]() {
var value;
value = this.start;
return {
next: () => {
if (value <= this.end) {
var result = { value: value, done: false };
value += 1;
return result;
} else {
return { value: undefined, done: true };
}
}
};
}
};
range = new MyRange(1, 5);
for (num of range) {
console.log(num);
}
সারাংশ
- Iterable হল এমন একটি অবজেক্ট যা Iterator তৈরি করতে সক্ষম, এবং এটি for...of লুপের মাধ্যমে ট্রাভার্স করা যায়।
- Iterator একটি অবজেক্ট যা next() মেথড প্রদান করে এবং এটি একে একে উপাদান ফেরত দেয়।
- CoffeeScript-এ Array এবং Object ইটারেশন সহজ এবং সংক্ষিপ্ত, এবং আপনি কাস্টম Iterable তৈরি করতে পারেন যা Symbol.iterator ব্যবহার করে একটি Iterator প্রদান করবে।
CoffeeScript-এ Iterables এবং Iterators এর মাধ্যমে আপনি কোডের কার্যকারিতা বাড়াতে এবং ডেটা সংগ্রহের উপাদানগুলোকে সহজে পরিচালনা করতে পারেন।
CoffeeScript-এ iteration (পুনরাবৃত্তি) করা অনেক সহজ এবং কার্যকরী। JavaScript-এর মতোই CoffeeScript-এ লুপ এবং iteration এর জন্য বিভিন্ন কৌশল ব্যবহার করা যায়। CoffeeScript এর সিনট্যাক্স এতটাই পরিষ্কার এবং সংক্ষিপ্ত যে iteration techniques গুলি আরও সহজ হয়ে ওঠে। এখানে আমরা CoffeeScript-এ কিছু Advanced Iteration Techniques আলোচনা করবো, যেমন:
- Array Comprehensions
- Iterating over objects
- Custom Iterators
- Iterating with
forEachandmap
1. Array Comprehensions
Array comprehension CoffeeScript-এর একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে অ্যারে থেকে নতুন অ্যারে তৈরি করতে সাহায্য করে। এটি মূলত এক্সপ্রেশন, রেঞ্জ এবং শর্তের সাথে ব্যবহার করা হয়।
উদাহরণ: Basic Array Comprehension
squares = (x * x for x in [1..5])
console.log squares # [1, 4, 9, 16, 25]
এখানে, [1..5] একটি রেঞ্জ যা ১ থেকে ৫ পর্যন্ত সংখ্যা নিয়ে আসে এবং x * x দ্বারা প্রতিটি সংখ্যার বর্গ তৈরি করা হয়।
উদাহরণ: Array Comprehension with Condition
evenSquares = (x * x for x in [1..10] when x % 2 == 0)
console.log evenSquares # [4, 16, 36, 64, 100]
এখানে, when x % 2 == 0 শর্তটি ব্যবহার করা হয়েছে, যার মাধ্যমে কেবলমাত্র যুগল সংখ্যা (even numbers) এর বর্গ নেওয়া হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var squares;
squares = (function() {
var i, ref, results;
results = [];
for (i = 1, ref = 5; i <= ref; i++) {
results.push(i * i);
}
return results;
})();
console.log(squares); // [1, 4, 9, 16, 25]
2. Iterating over Objects
CoffeeScript-এ অবজেক্টের উপর iteration করার জন্য সহজ সিনট্যাক্স ব্যবহার করা হয়। আপনি for লুপ ব্যবহার করে অবজেক্টের প্রতিটি কী-ভ্যালু জোড়া নিয়ে কাজ করতে পারেন।
উদাহরণ: Iterating Over Object Keys and Values
person = name: "Alice", age: 30, city: "New York"
for key, value of person
console.log "#{key}: #{value}"
এখানে, for key, value of person অবজেক্টের প্রতিটি কী-ভ্যালু জোড়ার জন্য পুনরাবৃত্তি করে। ফলস্বরূপ:
name: Alice
age: 30
city: New York
JavaScript-এ কম্পাইল হওয়া কোড:
var person, key, value;
person = {name: "Alice", age: 30, city: "New York"};
for (key in person) {
if (person.hasOwnProperty(key)) {
value = person[key];
console.log(key + ": " + value);
}
}
3. Custom Iterators
CoffeeScript-এ আপনি নিজস্ব iterator তৈরি করতে পারেন, যা আপনাকে কাস্টম লজিক অনুযায়ী একটি অ্যারে বা তালিকার উপর iteration করার সুবিধা দেয়।
উদাহরণ: Custom Iterator
range = (start, end) ->
for i in [start..end]
yield i
for num in range(1, 5)
console.log num
এখানে, range ফাংশনটি একটি কাস্টম iterator তৈরি করেছে যা start থেকে end পর্যন্ত সংখ্যা পুনরাবৃত্তি করে। yield কিওয়ার্ডটি iteration এর মাধ্যমে মান প্রদান করে।
JavaScript-এ কম্পাইল হওয়া কোড:
var range;
range = function(start, end) {
var i, ref, results;
results = [];
for (i = start, ref = end; i <= ref; i++) {
results.push(i);
}
return results;
};
var num, ref;
ref = range(1, 5);
for (var i = 0, len = ref.length; i < len; i++) {
num = ref[i];
console.log(num);
}
4. Iterating with forEach and map
CoffeeScript-এ forEach এবং map এর মতো আরামদায়ক array methods ব্যবহার করা যায়। এগুলি JavaScript-এর অ্যারে মেথডের মতোই কাজ করে এবং কিছুটা সহজ সিনট্যাক্সে লেখা হয়।
উদাহরণ: forEach ব্যবহার
numbers = [1, 2, 3, 4, 5]
numbers.forEach (num) -> console.log num
এখানে, forEach method প্রতিটি উপাদান নিয়ে ফাংশনটি চালায়।
উদাহরণ: map ব্যবহার
numbers = [1, 2, 3, 4, 5]
squares = numbers.map (num) -> num * num
console.log squares # [1, 4, 9, 16, 25]
এখানে, map method প্রতিটি উপাদানের উপর num * num এক্সপ্রেশন প্রয়োগ করে এবং একটি নতুন অ্যারে তৈরি করে।
JavaScript-এ কম্পাইল হওয়া কোড:
var numbers, squares;
numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(num) {
return console.log(num);
});
squares = numbers.map(function(num) {
return num * num;
});
console.log(squares); // [1, 4, 9, 16, 25]
5. Breaking and Continuing in Iterations
CoffeeScript-এ break এবং continue কিওয়ার্ডগুলি iteration-এর মধ্যে লুপ নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
উদাহরণ: break এবং continue
numbers = [1, 2, 3, 4, 5, 6]
for num in numbers
continue if num % 2 == 0 # শুধুমাত্র বিজোড় সংখ্যা প্রিন্ট করবে
break if num > 4 # ৪-এর পর loop বন্ধ হয়ে যাবে
console.log num
এখানে, continue ব্যবহার করে বিজোড় সংখ্যা বাদ দেয়া হয়েছে এবং break ব্যবহার করে ৪-এর পর iteration বন্ধ করা হয়েছে।
JavaScript-এ কম্পাইল হওয়া কোড:
var numbers, num;
numbers = [1, 2, 3, 4, 5, 6];
for (var i = 0, len = numbers.length; i < len; i++) {
num = numbers[i];
if (num % 2 === 0) {
continue;
}
if (num > 4) {
break;
}
console.log(num);
}
সারাংশ
- Array Comprehensions: CoffeeScript-এ অ্যারে থেকে নতুন অ্যারে তৈরি করার একটি সংক্ষিপ্ত এবং শক্তিশালী পদ্ধতি।
- Iterating over Objects: CoffeeScript-এ অবজেক্টের উপর সহজেই iteration করা যায়।
- Custom Iterators: নিজস্ব iterator তৈরি করা সম্ভব, যা কাস্টম লজিক অনুযায়ী পুনরাবৃত্তি করতে সাহায্য করে।
- forEach এবং map: CoffeeScript-এ অ্যারে মেথড
forEachএবংmapব্যবহার করে iteration সহজ করা যায়। - Breaking and Continuing: লুপের মধ্যে
breakএবংcontinueব্যবহার করে iteration নিয়ন্ত্রণ করা যায়।
CoffeeScript-এর Advanced Iteration Techniques-এর মাধ্যমে আপনি আপনার কোডকে আরও কার্যকরী এবং সংক্ষিপ্ত করতে পারবেন, যা কোড লেখার অভিজ্ঞতাকে উন্নত করে।
Read more