রুবি কখনও উন্নতি থামায় না!
সংস্করণ 2.7 নতুন বৈশিষ্ট্য, পদ্ধতি এবং কর্মক্ষমতা উন্নতি সহ এখানে আছে. এটি 25 ডিসেম্বর, 2019 এ মুক্তি পেয়েছে।
এখন, ম্যাটজের মতে…
এটি শেষ 2.x সংস্করণ প্রকাশ। কারণ পরের বছর আমরা পাচ্ছি রুবি 3.0!
কিন্তু আমরা সেখানে পৌঁছানোর আগে...
আসুন 2.7-এ কিছু পরিবর্তন এবং নতুন বৈশিষ্ট্য দেখে নেওয়া যাক, যাতে আপনি সংস্করণ আপডেটের জন্য প্রস্তুত হতে পারেন।
বিষয়বস্তু
- 1 গণনাযোগ্য#টালি
- ব্লকগুলির জন্য 2 নম্বরযুক্ত প্যারামিটার [পরীক্ষামূলক]
- 3 অ্যারে#ছেদ
- 4 গণনাযোগ্য#ফিল্টার_ম্যাপ
- 5 গণনাকারী#উৎপাদন
- 6 IRB একটি ফেস লিফট পায়?
- 7 রুবি প্যাটার্ন ম্যাচিং [পরীক্ষামূলক]
- 8 অন্যান্য পরিবর্তন
- 9 সারাংশ
- 9.1 সম্পর্কিত
গণনাযোগ্য#টালি
এটি একটি নতুন রুবি পদ্ধতি যা একটি অ্যারের সমস্ত উপাদান গণনা করে এবং তাদের সংখ্যা সহ একটি হ্যাশ ফেরত দেয়৷
আপনি নিজে এটি করতে পারেন, তবে এটি tally পদ্ধতি আপনার কাজ বাঁচায়।
এখানে একটি উদাহরণ আছে :
%w(a a a b b c).tally
যার ফলাফল :
{"a"=>3, "b"=>2, "c"=>1} আমি এটা পছন্দ করি!
ব্লকগুলির জন্য সংখ্যাযুক্ত পরামিতি [পরীক্ষামূলক]
একটি আকর্ষণীয় নতুন বৈশিষ্ট্য, যা আমি কিছুক্ষণের জন্য চাইছি, ব্লক পরামিতিগুলির জন্য একটি ডিফল্ট নাম৷
এখানে একটি নিয়মিত ব্লক রয়েছে, একটি প্যারামিটার সহ :
[1,2,3]. প্রতিটি { |n| n রাখে
এই |n| প্যারামিটার, যা ব্যবহার করার জন্য আপনাকে সংজ্ঞায়িত করতে হবে।
কিন্তু যদি আমাদের একটি ডিফল্ট নাম থাকত?
ঠিক আছে, এটি রুবি 2.7 এর সাথে নিয়ে আসা গুডিজগুলির মধ্যে একটি, যদিও একটি পরীক্ষামূলক বৈশিষ্ট্য হিসাবে , এটা আমাদের অনেক টাইপিং বাঁচাতে পারে।
এটি দেখতে কেমন তা এখানে রয়েছে৷ :
[1,2,3]. প্রতিটি { _1 রাখে }৷
যেখানে _1 প্রথম প্যারামিটারকে বোঝায়, আপনি _2 ব্যবহার করতে পারেন আপনার যদি দ্বিতীয়টি থাকে, এবং হ্যাঁ, _3 একটি 3য় প্যারামিটার, ইত্যাদির জন্য।
বেশ দুর্দান্ত!
এখন, সামান্য কিছু ট্রিভিয়া।
এই বৈশিষ্ট্যটি প্রথমে @1 এর মত দেখতে প্রস্তাব করা হয়েছিল , কিন্তু এটি একটি উদাহরণ ভেরিয়েবলের মতো দেখতে অনেক বেশি, তাই কিছু আলোচনার পরে, এটি _1 ব্যবহার করার বিষয়ে নিষ্পত্তি করা হয়েছিল পরিবর্তে।
অ্যারে#ছেদ
এটি একটি নতুন পদ্ধতি, কিন্তু নতুন কার্যকারিতা নয়৷
আসলে…
এটি একটি উপনামের মতো!
রুবি 2.6 অ্যারে union চালু করেছে &difference পদ্ধতি, Array#|-এর আরও সংক্ষিপ্ত সমতুল্য মেলে , এবং Array#- .
কিন্তু অনুপস্থিত অপারেশন ছিল intersection , যার আরেকটি সংক্ষিপ্ত সংস্করণ মনে রাখা কঠিন।
Array#& method .
এখন :
এই পদ্ধতিগুলি কী করে এবং কীভাবে কাজ করে?
উদাহরণ :
<প্রে>[1, 2, 3]।ছেদ ([2, 3, 4])# [2, 3][1, 2, 3] এবং [2, 3, 4]# [2, 3]আচ্ছা…
নামটি একে দেয়, intersection দুটি অ্যারের মধ্যে ছেদ খুঁজে বের করে। অন্য কথায়, কোন উপাদানে মিল রয়েছে তা খুঁজে বের করে।
| সংক্ষিপ্ত সংস্করণ | দীর্ঘ সংস্করণ |
|---|---|
| & | ছেদ |
| | | ইউনিয়ন |
| – | পার্থক্য |
আমি সবসময় ভুলে যাই এই 3টি পদ্ধতির মধ্যে কোনটি কী করে!
কিন্তু এই নতুন পদ্ধতিগুলির সাথে, এটি অনেক মনে রাখা সহজ কারণ তাদের নামের অর্থ কিছু .
এটি ভাল কোড লেখার একটি ভাল পাঠ, btw.
গণনাযোগ্য#ফিল্টার_ম্যাপ
এই filter_map পদ্ধতি হল select কে একত্রিত করার একটি প্রচেষ্টা &map একটি পদ্ধতিতে।
কেন?
কারণ প্রথমে একটি তালিকা ফিল্টার করা, তারপর অবশিষ্ট উপাদানগুলিকে ম্যাপ করা একটি সাধারণ কাজ৷
৷আপনি এটি দুটি উপায়ে করতে পারেন৷ :
(1..8).select(&:even?).map { |n| n ** 2 }# OR(1..8).মানচিত্র { |n| n ** 2 যদি n.even? }.কম্প্যাক্ট আমি উভয়ই ব্যবহার করেছি, কিন্তু আমি প্রথম দিকে ঝুঁকতে থাকি কারণ উদ্দেশ্যটি আরও স্পষ্ট৷
এখন :
Ruby 2.7-এ, এই filter_map পদ্ধতি এক পাসে এটি করে।
এরকম :
(1..8).filter_map { |n| n ** 2 যদি n.even? }# [৪, ১৬, ৩৬, ৬৪] আমি ব্লকের মধ্যে ইফ স্টেটমেন্ট রাখার সবচেয়ে বড় অনুরাগী নই, তবে কখনও কখনও কাজটি সম্পন্ন করার জন্য তাদের প্রয়োজন হয়।
এটি ছাড়াও, আপনার কিছু জানা উচিত।
filter_map অপারেশন map + compact এর মত আচরণ করে না , কারণ এটি false সরিয়ে দেয় বস্তু, এবং compact করে না।
মনে রাখা ভাল জিনিস!
গণনাকারী#উৎপাদন
এখানে আরেকটি নতুন পদ্ধতি আপনার কাছে আকর্ষণীয় মনে হতে পারে, তবে এর জন্য কিছু সৃজনশীলতার প্রয়োজন হতে পারে এটি থেকে সর্বাধিক পেতে।
এটি হল Enumerator#produce পদ্ধতি।
এটা কি করে?
ফিচার প্রস্তাব অনুযায়ী :
"এই পদ্ধতিটি একটি অসীম ক্রম তৈরি করে যেখানে প্রতিটি পরবর্তী উপাদান পূর্ববর্তী উপাদানটিতে ব্লক প্রয়োগ করে গণনা করা হয়।"
হ্যাঁ৷
৷কখনও শেষ না হওয়া সিকোয়েন্স তৈরি করার আরেকটি উপায়!
এখানে একটি উদাহরণ আছে :
গণনাকারী.উৎপাদন(1, &:next).take(5)# [1, 2, 3, 4, 5]
এই উদাহরণে, আপনি যদি take(10) করেন তাতে কিছু যায় আসে না অথবা take(10_000) , আপনি এটি থেকে অসীম সংখ্যক মান পাবেন।
Btw, 1 প্রাথমিক মান।
এবং &:next produce করার জন্য সেই মানটিকে বলা হয় পদ্ধতি ক্রমানুসারে পরবর্তী উপাদান।
IRB একটি ফেস লিফট পায়?
ইদানীং, IRB কিছু ভালবাসা এবং মনোযোগ পাচ্ছে, এবং Ruby 2.7 এর সাথে যোগ করে চলেছে৷
আমরা পাচ্ছি :
- মাল্টি-লাইন সম্পাদনা
- সিনট্যাক্স হাইলাইটিং
- বিল্ট-ইন RDoc ইন্টিগ্রেশন
- কমান্ড ইতিহাস ডিফল্টরূপে সক্রিয়
- স্বয়ংক্রিয়-সম্পূর্ণতা ডিফল্টরূপে সক্রিয়
আসলে :
এটি এত বড় পরিবর্তন যে আপনি যখন Ruby 2.7 এর সাথে irb শুরু করবেন তখন আপনি একটি সতর্কতা পাবেন।
আপনি যদি irb এর পুরানো সংস্করণটি ব্যবহার চালিয়ে যেতে চান তবে আপনি এখনও irb --legacy এর সাথে করতে পারেন আদেশ এই নতুন IRB এর সাথে আমার প্রধান সমস্যা হল লাইন এডিটিং, লিগ্যাসি IRB তে (বা Pry) আমি ALT ধরে রাখতে পারি এবং দ্রুত সরানোর জন্য বাম তীর টিপুন, কিন্তু এটি নতুন IRB তে কাজ করে না।
এটি একবার চেষ্টা করুন এবং দেখুন এটি আপনার জন্য কিভাবে কাজ করে৷
৷রুবি প্যাটার্ন ম্যাচিং [পরীক্ষামূলক]
একটি প্রায়শই অনুরোধ করা বৈশিষ্ট্য যা 2.7 এ আসছে তা হল প্যাটার্ন ম্যাচিং৷
৷এটি পরীক্ষামূলক হিসাবে চিহ্নিত৷৷
কিন্তু প্যাটার্ন ম্যাচিং কি এবং এটি কিভাবে আপনার উপকার করে?
ঠিক আছে, যদি আমি এটি সঠিকভাবে বুঝতে পারি, প্যাটার্ন ম্যাচিং রেগুলার এক্সপ্রেশনের মতো, কিন্তু ডেটা স্ট্রাকচারের জন্য (অ্যারে/হ্যাশ)।
এখানে একটি উদাহরণ আছে :
[1,2,3] [a,b,c] # true[1,2,3] in [a] # মিথ্যা
যদি একটি মিল থাকে, এই পরিবর্তনশীল নামগুলি (যেমন a ) স্থানীয় ভেরিয়েবল হয়ে উঠুন যা আপনি অ্যাক্সেস করতে পারেন।
হ্যাশ সহ উদাহরণ :
{ a:1, b:2, c:[] } in { a:a, b:b, c:[] } # truep a# 1
এটি in ব্যবহার করে কীওয়ার্ড।
এটি নতুন নয়, কিন্তু অস্বাভাবিক কারণ রুবি 2.7 in এর আগে শুধুমাত্র একটি for অংশ হিসাবে ব্যবহার করা হয়েছিল৷ লুপ (রুবিতে অত্যন্ত নিরুৎসাহিত), তাই আমরা দরকারী কিছুর জন্য এই কীওয়ার্ডটি পুনরায় ব্যবহার করতে পারি।
আরও ভালো …
আপনি কোন ভেরিয়েবল ব্যবহার করেন তা কোন ব্যাপার না, a,b,c এখানে কাজ করে, কিন্তু f,g,h এছাড়াও কাজ করে।
এটা সব প্যাটার্ন সম্পর্কে!
অন্যান্য পরিবর্তনগুলি
উল্লেখ করার মতো কিছু অতিরিক্ত পরিবর্তন।
- নতুন কমপ্যাকশন GC মেমরি ফ্র্যাগমেন্টেশন উন্নত করে
- পদ্ধতি আর্গুমেন্ট
**nilএখন ঘোষণা করে যে একটি পদ্ধতিতে কোন কীওয়ার্ড লাগে না - পদ্ধতি আর্গুমেন্ট
...একটি আর্গুমেন্ট ফরওয়ার্ডিং মেকানিজম যোগ করে (বন্ধনী প্রয়োজন, যেমনmake_salad(...)) - ফাইবার উন্নতি। ফাইবার বস্তুর একটি নতুন পুল (যা থেকে নতুন ফাইবার বরাদ্দ করা হয়) ফাইবারকে আরও দক্ষ করে তোলে
- থ্রেডের উন্নতি। থ্রেড তৈরি করার একটি ভাল, আরও অপ্টিমাইজ করা উপায় মাল্টি-থ্রেডিংকে দ্রুত করে তোলে
আপনি এই সম্পর্কে কি মনে করেন?
2.7-এর জন্য NEWS ফাইলে ফাইবার এবং থ্রেড তৈরি উভয়ের জন্য 10x কর্মক্ষমতা উন্নতির কথা উল্লেখ করা হয়েছে, আমি নিজে এটি পরীক্ষা করিনি, তবে আপনি যদি আপনার ফলাফল সম্পর্কে আমাকে জানান।
সারাংশ
আপনি এখন রুবি প্রোগ্রামিং ভাষার সাম্প্রতিক পরিবর্তনের সাথে আপ টু ডেট! আপনি IRB পরিবর্তন, নতুন পদ্ধতি এবং প্যাটার্ন ম্যাচিং এর মত কিছু পরীক্ষামূলক বৈশিষ্ট্য সম্পর্কে শিখেছেন।
খবর ছড়িয়ে দিতে এই নিবন্ধটি শেয়ার করুন!
পড়ার জন্য ধন্যবাদ 🙂