কম্পিউটার

11 রুবি কৌশল যা আপনি আগে দেখেননি

কিছু দুর্দান্ত রুবি কৌশল খুঁজছেন?

আপনি তাদের খুঁজে পেয়েছেন!

এই নিবন্ধে আমি আপনার সাথে আমার প্রিয় কিছু শেয়ার করতে চাই।

বিষয়বস্তু

  • 1টি গভীর অনুলিপি
  • ল্যাম্বডা কল করার 2টি ভিন্ন উপায়
  • 3 একটি প্রাক-ভরা অ্যারে তৈরি করা
  • 4 সত্য, মিথ্যা এবং শূন্য হল বস্তু
  • 5 Lambdas আর্গুমেন্টের ব্যাপারে কঠোর, কিন্তু Procs পাত্তা দেয় না
  • 6 irb বা ফাইল ছাড়াই সরাসরি কোড এক্সিকিউট করুন
  • 7 আপনার নিজস্ব মিনি-আইআরবি এক কমান্ডে
  • 8 একটি বস্তুকে আনফ্রিজ করুন (বিপদ!)
  • বিশেষ পরিচয় সহ ৯টি বস্তু
  • 10 irb বা pry-এ বড় আউটপুট এড়িয়ে চলুন
  • 11 বর্তমান কল স্ট্যাক পেতে কলার পদ্ধতি ব্যবহার করে
  • 12 বোনাস! যেকোনো মানকে বুলিয়ানে রূপান্তর করুন
  • 13 বোনাস! একটি পরিবর্তনশীল নাম হিসাবে একটি কীওয়ার্ড ব্যবহার করুন
  • 14 সারাংশ
    • 14.1 সম্পর্কিত

গভীর অনুলিপি

যখন আপনি copy করেন একটি অবজেক্ট যাতে অন্যান্য অবজেক্ট থাকে, যেমন একটি Array , শুধুমাত্র এই বস্তুর একটি রেফারেন্স অনুলিপি করা হয়.

আপনি এটি এখানে কর্মে দেখতে পারেন:

খাদ্য =%w( রুটি দুধ কমলা )food.map(&:object_id) # [35401044, 35401020, 35400996]food.clone.map(&:object_id) # [35401044, 35401044, 3540109, 3540109] 4020 

Marshal ব্যবহার করে ক্লাস, যা সাধারণত সিরিয়ালাইজেশনের জন্য ব্যবহৃত হয়, আপনি একটি বস্তুর একটি 'গভীর অনুলিপি' তৈরি করতে পারেন।

def deep_copy(obj) Marshal.load(Marshal.dump(obj))end

ফলাফল:

deep_copy(food).map(&:object_id) # [42975648, 42975624, 42975612]

ল্যাম্বডা কল করার বিভিন্ন উপায়

my_lambda =-> { 'হ্যালো' বলে }my_lambda.callmy_lambda[]my_lambda.()my_lambda.===

যদি সম্ভব হয়, আপনার প্রথমটির সাথে লেগে থাকা উচিত (call ), কারণ এটি সবচেয়ে বেশি মানুষ জানে।

একটি প্রাক-ভরা অ্যারে তৈরি করা হচ্ছে

অ্যারে ক্লাস একটি আর্গুমেন্ট + একটি ব্লক নিতে পারে, যা আপনাকে n দিয়ে একটি অ্যারে তৈরি করতে দেয় উপাদান ডিফল্টরূপে এই উপাদানগুলি হল nil , কিন্তু যদি আপনার একটি ব্লক থাকে, তাহলে মানগুলি থেকে আসবে।

উদাহরণ :

Array.new(10) { র্যান্ড 300 }

এটি 0 এবং 299 এর মধ্যে 10টি র্যান্ডম সংখ্যা সহ একটি অ্যারে তৈরি করবে৷

সত্য, মিথ্যা এবং শূন্য হল বস্তু

true.class # TrueClassfalse.class # FalseClassnil.class # NilClass

এই বস্তুগুলির শুধুমাত্র একটি অনুলিপি আছে, এবং আপনি চাইলেও এর বেশি তৈরি করতে পারবেন না।

এটি অ্যাকশনে সিঙ্গলটন প্যাটার্ন।

ল্যাম্বডাস আর্গুমেন্টের ব্যাপারে কঠোর, কিন্তু Procs পাত্তা দেয় না

my_lambda =->(a, b) { a + b }my_proc =Proc.new { |a, b| a + b }my_lambda.call(2)# আর্গুমেন্ট ত্রুটি:আর্গুমেন্টের ভুল সংখ্যা (2 এর জন্য 1)my_proc.call(2)# TypeError:nil কে Fixnum এ জোর করা যাবে না

irb বা ফাইল ছাড়াই সরাসরি কোড এক্সিকিউট করুন

ruby কমান্ডের বেশ কয়েকটি আকর্ষণীয় বিকল্প রয়েছে যা আপনি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, -e দিয়ে ফ্ল্যাগ আপনি এক্সিকিউট করার জন্য কোডের একটি স্নিপেটে পাস করতে পারেন।

ruby -e '5.times { puts "Fun with Ruby" }'

আপনি -h ব্যবহার করে আরও খুঁজে পেতে পারেন পতাকা।

একটি কমান্ডে আপনার নিজস্ব মিনি-আইআরবি

কখনও জানতে চেয়েছেন কিভাবে irb কাজ করে? ওয়েল, এটি এটির একটি অতি-সাধারণ সংস্করণ৷

মনে রাখবেন 'REPL' এর অর্থ কী:Read-Eval-Print লুপ।

রুবি -এন -ই 'পি ইভাল($_)'

আপনি একটি প্রম্পট পাবেন না, তবে এগিয়ে যান এবং কিছু রুবি কোড টাইপ করুন৷

"A" * 5"AAAAA"

এটি কাজ করে কারণ -n পতাকা এটি করে:

-n অনুমান 'while gets(); ... শেষ' আপনার স্ক্রিপ্টের চারপাশে লুপ করুন

এবং $_ একটি বিশ্ব পরিবর্তনশীল. যেটিতে নিম্নলিখিতগুলি রয়েছে:

গেটস বা রিডলাইন দ্বারা স্ট্রিংয়ের শেষ ইনপুট লাইন।

একটি বস্তুকে আনফ্রিজ করুন (বিপদ!)

কোনো বস্তুকে আনফ্রিজ করার কোনো রুবি পদ্ধতি নেই, তবে Fiddle ব্যবহার করে ক্লাস আপনি এটি ঘটতে রুবি ইন্টারনাল এ পৌঁছাতে পারেন।

'fiddle'str ='water'.freezestr.frozen প্রয়োজন? # truememory_address =str.object_id * 2Fiddle::Pointer.new(memory_address)[1] &=~8str.frozen? # মিথ্যা

বাড়িতে এটি চেষ্টা করবেন না!

বিশেষ পরিচয় সহ বস্তু

রুবি অবজেক্টের একটি শনাক্তকারী বা 'আইডি' নম্বর থাকে যা আপনি object_id ব্যবহার করে অ্যাক্সেস করতে পারেন পদ্ধতি কিছু বস্তুর একটি নির্দিষ্ট আইডি থাকে:ফিক্সনাম, সত্য, মিথ্যা এবং শূন্য।

false.object_id # 0true.object_id # 2nil.object_id # 41.object_id # 32.object_id # 5

ফিক্সনাম আইডি এই সূত্রটি ব্যবহার করে:(সংখ্যা * 2) + 1।

বোনাস:সর্বাধিক ফিক্সনাম হল 1073741823 , এর পরে আপনি একটি বিগনাম অবজেক্ট পাবেন।

irb বা pry-এ বড় আউটপুট এড়িয়ে চলুন

আপনি যদি irb এ কাজ করেন এবং কিছু সত্যিই বড় অ্যারে বা স্ট্রিং এর বিষয়বস্তু দিয়ে আপনার স্ক্রীন পূরণ করা এড়াতে চান আপনি শুধু ; যোগ করতে পারেন আপনার কোডের শেষে।

উদাহরণ :

'rest-client'RestClient.get('www.rubyguides.com');

; ছাড়াই আবার চেষ্টা করুন পার্থক্য দেখতে 🙂

বর্তমান কল স্ট্যাক পেতে কলার পদ্ধতি ব্যবহার করে

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

def foo barenddef বার Callerendfoo রাখে

আউটপুট :

-:3:in 'foo'-:10:in '
'

আপনার যদি বর্তমান পদ্ধতির নামের প্রয়োজন হয় তবে আপনি __method__ ব্যবহার করতে পারেন অথবা __callee__ .

বোনাস! যেকোনো মানকে বুলিয়ানে রূপান্তর করুন

!!(1) # সত্য!!(শূন্য) # মিথ্যা

বোনাস! একটি পরিবর্তনশীল নাম হিসাবে একটি কীওয়ার্ড ব্যবহার করুন

def foo (if:nil) binding.local_variable_get(:if)endfoo(if:true)

সারাংশ

আমি আশা করি আপনি এই রুবি কৌশলগুলি উপভোগ করেছেন!

আপনার বন্ধুদের সাথে সেগুলি শেয়ার করুন যাতে তারাও সেগুলি উপভোগ করতে পারে এবং আমার ব্লগে সদস্যতা নিতে পারে৷ নীচের ফর্মে যাতে আপনি আমার পরবর্তী পোস্ট মিস করবেন না। 🙂


  1. আপনি কোন রুবি আইডিই ব্যবহার করবেন?

  2. এটম এডিটর:রুবি ডেভেলপারদের জন্য কৌশল, প্লাগইন এবং শর্টকাট!

  3. রুবি কনস্ট্যান্টস সম্পর্কে আপনার যা জানা দরকার

  4. Apple TV 4K:10 টি টিপস এবং ট্রিকস আপনাকে অবশ্যই জানা উচিত