কম্পিউটার

7 আকর্ষণীয় রুবি কোড উদাহরণ

নতুন রুবি কৌশল, নিদর্শন এবং পদ্ধতি শেখার একটি উপায় হল অন্যদের লেখা কোড পড়া।

কিন্তু আপনি কোথায় পাবেন পড়ার মতো আকর্ষণীয় কোড ?

আমাদের কাছে অনেকগুলি ওপেন সোর্স প্রজেক্ট এবং কোডিং চ্যালেঞ্জ সাইট রয়েছে যা আপনাকে আপনার নিজের জমা দেওয়ার পরে অন্য ডেভেলপারদের থেকে সমাধান দেখতে দেয়৷

এই নিবন্ধে :

আমি 7টি উদাহরণ কম্পাইল করেছি যা আমি মনে করি আপনি উপভোগ করবেন।

আমি আপনাকে প্রতিটি উদাহরণের উপর কিছু ভাষ্য দিতে যাচ্ছি যাতে আপনাকে এর থেকে সর্বাধিক সুবিধা পেতে সহায়তা করে।

দুটি সংখ্যার যোগফল

এই উদাহরণে আমরা খুঁজে বের করতে চাই যদি একটি অনন্য সংখ্যার অ্যারে দেওয়া হয়, সেখানে দুটি সংখ্যার সংমিশ্রণ রয়েছে যা একটি লক্ষ্য সংখ্যা পর্যন্ত যোগ করে।

কোড :

def sum_eq_n?(arr, n) রিটার্ন true যদি arr.empty? &&n ==0 arr.product(arr).reject { |a,b| a ==b }. কোন? { |a,b| a + b ==n }শেষ

এটি আকর্ষণীয় কারণ আমি product ব্যবহার করছি পদ্ধতি এখানে।

আপনি যখন এই পদ্ধতিটি ব্যবহার করেন তখন একটি লুপের ভিতরে একটি লুপ থাকার মতো হয় যা অ্যারে A-এর সমস্ত মানকে অ্যারে B-এর সমস্ত মানের সাথে একত্রিত করে৷

গণনা, ম্যাপিং এবং অনুসন্ধান

ধরা যাক যে আপনি একটি গাণিতিক ক্রমানুসারে অনুপস্থিত সংখ্যাটি খুঁজে পেতে চান, যেমন (2,4,6,10) .

আমরা একটি কৌশল ব্যবহার করতে পারি যেখানে আমরা সংখ্যার মধ্যে পার্থক্য গণনা করি।

[2, 2, 4] 

এখানে আমাদের লক্ষ্য হল ক্রমটি কী তা খুঁজে বের করা৷

এটা কি বাড়ছে নাকি কমছে?

কত দিয়ে?

এই কোডটি ক্রমটি প্রকাশ করে:

পার্থক্য =[2, 2, 4]differences.max_by { |n| differents.count(n) }# 2# এটি অনুক্রমের সংখ্যার মধ্যে বৃদ্ধি 

একবার আমরা ক্রমটি জেনে গেলে আমরা অনুপস্থিত একটি খুঁজে পেতে সমস্ত সংখ্যার তুলনা করতে পারি।

এখানে কোডটি আছে :

def find_missing(sequence) consecutive =sequence.each_cons(2) পার্থক্য =consecutive.map { |a,b| b - a } sequence =differents.max_by { |n| differents.count(n) } missing_between =ধারাবাহিক. খুঁজুন { |a,b| (b - a) !=ক্রম } missing_between.first + sequenceendfind_missing([2,4,6,10])# 8

আমাদের জন্য কঠোর পরিশ্রম করতে আমরা এখানে কতগুলি রুবি পদ্ধতি ব্যবহার করছি তা গণনা করুন 🙂

রেগুলার এক্সপ্রেশনের উদাহরণ

আপনি যদি স্ট্রিং নিয়ে কাজ করেন এবং আপনি প্যাটার্ন খুঁজে পেতে চান তাহলে রেগুলার এক্সপ্রেশন আপনার বন্ধু।

এগুলি সঠিকভাবে পেতে কিছুটা কঠিন হতে পারে, তবে অনুশীলন দক্ষতা অর্জন করে!

এখন :

ধরা যাক যে আমরা খুঁজে বের করতে চাই যে একটি প্রদত্ত স্ট্রিং VOWEL থেকে NON-VOWEL অক্ষরের প্যাটার্ন অনুসরণ করে কিনা৷

এরকম :

"ateciyu"

তারপর আমরা match? সহ একটি রেগুলার এক্সপ্রেশন ব্যবহার করতে পারি এটি বের করার পদ্ধতি।

এখানে কোডের উদাহরণ আছে :

def alternating_characters?(s) type =[/[aeiou]/, /[^aeiou]/].cycle if s.start_with?(/[^aeiou]/) type.next end s.chars.all? { |চ| ch.match?(type.next) }endalternating_ characters?("ateciyu")# সত্য

কিছু ​​জিনিস লক্ষ্য করুন :

  1. আমরা cycle ব্যবহার করি পদ্ধতি যাতে আমরা VOWEL regex এবং Non-VOWEL regex এর মধ্যে পরিবর্তন করতে পারি৷
  2. আমরা স্ট্রিংটিকে chars সহ অক্ষরের অ্যারেতে রূপান্তর করি যাতে আমরা all? ব্যবহার করতে পারি পদ্ধতি।

পুনরাবৃত্তি এবং স্ট্যাকের উদাহরণ

পুনরাবৃত্তি হল যখন একটি পদ্ধতি নিজেকে একাধিকবার একটি সমাধানের দিকে অগ্রগতির উপায় হিসাবে কল করে৷

অনেক আকর্ষণীয় সমস্যা পুনরাবৃত্তির মাধ্যমে সমাধান করা যেতে পারে .

কিন্তু যেহেতু পুনরাবৃত্তির সীমা আছে, আপনি পরিবর্তে একটি স্ট্যাক ডেটা স্ট্রাকচার ব্যবহার করতে পারেন।

এখন :

আসুন একটি উদাহরণ দেখি যেখানে আমরা একটি প্রদত্ত অ্যারের "পাওয়ার সেট" খুঁজে বের করতে চাই। পাওয়ার সেট হল সমস্ত উপসেটের একটি সেট যা অ্যারে থেকে তৈরি করা যেতে পারে।

এখানে পুনরাবৃত্তি সহ একটি উদাহরণ আছে :

def get_numbers(তালিকা, সূচক =0, নেওয়া =[]) ফেরত [গৃহীত] যদি index ==list.size get_numbers(তালিকা, index+1, নেওয়া) + get_numbers(তালিকা, সূচক+1, নেওয়া + [ তালিকা[সূচি]])শেষ_সংখ্যা([1,2,3])

এখানে একই সমস্যা একটি স্ট্যাক ব্যবহার করে সমাধান করা হয়েছে :

def get_numbers_stack(list) stack =[[0, []]] output =[] stack.empty পর্যন্ত? index, taken =stack.pop পরবর্তী আউটপুট <<নেওয়া হলে index ==list.size stack.unshift [index + 1, নেওয়া] stack.unshift [index + 1, নেওয়া + [list[index]]] end outputend 

এখানে ধারণা হল যে অ্যালগরিদমের প্রতিটি পাসে আমরা হয় একটি নম্বর নিচ্ছি বা একটি নম্বর নিচ্ছি না৷

আমরা ব্রাঞ্চ আউট করি এবং উভয় ফলাফল চেষ্টা করি যাতে আমরা সকল সম্ভাব্য সমন্বয় তৈরি করতে পারি .

একটি গাছ কল্পনা করুন যেখানে প্রতিটি পাতা একটি সমাধান।

লক্ষ্য করার মতো কয়েকটি বিষয় :

  1. পুনরাবৃত্তি সমাধানটি ছোট
  2. অ্যালগরিদমের প্রকৃত "প্রগতিশীল" অংশ (সূচক + 1) প্রায় একই
  3. স্ট্যাকটি আমরা ব্যবহার করছি শুধুমাত্র একটি অ্যারে কারণ সেখানে একটি Stack নেই রুবি
  4. তে ক্লাস

পদ্ধতি চেইনিং উদাহরণ

এটি আমার প্রিয় উদাহরণ কারণ এটি দেখায় যে রুবি কতটা শক্তিশালী৷

একত্রিত পদ্ধতি আপনাকে একটি পদ্ধতি দ্বারা উত্পাদিত আউটপুট নিতে এবং এটিকে অন্যটিতে পাস করতে দেয় .

ঠিক যেন একটা কারখানার উৎপাদন লাইন!

আপনি কিছু কাঁচামাল (ইনপুট) দিয়ে শুরু করেন, তারপর এই পদ্ধতিগুলিকে কল করার প্রক্রিয়ার মাধ্যমে, আপনি ধীরে ধীরে কাঁচামালগুলিকে পছন্দসই ফলাফলে রূপান্তরিত করেন৷

এখানে একটি উদাহরণ :

def longest_repetition(string) max =string .chars .chunk(&:itself) .map(&:last) .max_by(&:size) max? [ম্যাক্স 

একটি স্ট্রিং দেওয়া হলে, এই কোডটি সবচেয়ে দীর্ঘ বার পুনরাবৃত্তি করা অক্ষর খুঁজে পাবে .

দ্রষ্টব্য :

  • পঠনযোগ্যতা সর্বাধিক করার জন্য এই কোডটি কীভাবে ফর্ম্যাট করা হয়
  • Symbol#to_proc ব্যবহার করুন প্যাটার্ন (&:size )

Btw, এটাকে "Law of Demeter" এর সাথে গুলিয়ে ফেলবেন না।

সেই "আইন" হল অন্য বস্তুর অভ্যন্তরীণ অংশে পৌঁছানো।

এখানে আমরা শুধুমাত্র বস্তুর রূপান্তর করছি।

সূচক উদাহরণ সহ

আইটেমগুলির একটি সংগ্রহের উপর পুনরাবৃত্তি করার সময় আপনি কি বর্তমান সূচকটি পেতে চান?

আপনি with_index ব্যবহার করতে পারেন পদ্ধতি।

এখানে একটি উদাহরণ :

def reverse_alternate(string) string.gsub(/[^\s]+/).with_index { |w, idx| idx.even? ? w :w.reverse }endreverse_alternate("Apples Are Good")# "Apple erA Good"

বিজ্ঞপ্তি :

  • আমরা with_index একত্রিত করি &even? আমাদের বর্তমান শব্দটিকে বিপরীত করতে হবে কিনা তা খুঁজে বের করতে
  • ব্লক ছাড়া Gsub একটি Enumerator প্রদান করে অবজেক্ট, যা আপনাকে এটিকে অন্যান্য পদ্ধতির সাথে চেইন করতে দেয়

অবজেক্ট উদাহরণ সহ প্রতিটি

আরেকটি আকর্ষণীয় পদ্ধতি হল each_with_object , এবং এর বন্ধু with_object .

ফলাফল ধরে রাখার জন্য যখন আপনার কোন বস্তুর প্রয়োজন হয় তখন আপনি এই দুটি পদ্ধতি ব্যবহার করতে পারেন।

এখানে একটি উদাহরণ :

def clean_string(str) str .chars .each_with_object([]) { |ch, obj| ch =="#"? obj.pop :obj < 

এই উদাহরণে, যখন আমরা একটি # পাই তখন আমরা শেষ অক্ষরটি মুছে ফেলতে চাই প্রতীক।

বিজ্ঞপ্তি :

  • each_with_object একটি আর্গুমেন্ট নেয়, যেটি বস্তুটি দিয়ে আমরা শুরু করতে চাই। এই যুক্তিটি ২য় ব্লক প্যারামিটার হয়ে যায়।
  • আমরা স্ট্রিংটিকে অক্ষরের অ্যারেতে রূপান্তর করছি (char ) এবং তারপরে আমরা শেষ হয়ে গেলে একটি স্ট্রিংয়ে ফিরে যান (join )।
  • কি করতে হবে তা স্থির করতে আমরা একটি টারনারি অপারেটর ব্যবহার করছি, এটি কোডটিকে ছোট করে তোলে৷

সারাংশ

এই নিবন্ধে, আপনি আরও ভাল রুবি কোড লিখতে সাহায্য করার জন্য আমার মন্তব্য এবং ব্যাখ্যা সহ কিছু আকর্ষণীয় কোড উদাহরণ দেখেছেন৷

এই নিবন্ধটি শেয়ার করতে ভুলবেন না যাতে আরও লোকেরা এটি উপভোগ করতে পারে৷

পড়ার জন্য ধন্যবাদ!


  1. রুবি গ্রেপ পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  2. রুবি মধ্যে স্ট্যাটিক বিশ্লেষণ

  3. রুবিতে ফাইলগুলি কীভাবে পড়তে এবং লিখতে হয় (উদাহরণ সহ)

  4. রুবির অ্যারে ক্লাস কীভাবে ব্যবহার করবেন (উদাহরণ + দরকারী পদ্ধতি)