কম্পিউটার টিউটোরিয়াল

রুবির gets এবং chomp মাস্টার করুন: ইউজার ইনপুট কার্যকরভাবে পড়া

আপনি একটি রুবি প্রোগ্রাম লিখছেন এবং ইউজারকে একটি প্রশ্ন করতে চান…

কীভাবে করবেন?

আপনি রুবির gets মেথড ব্যবহার করে ইউজার ইনপুট পড়তে পারেন।

আপনি gets কল করতে পারেন।

তারপর আপনার প্রোগ্রাম আপনার কীবোর্ড দিয়ে কিছু টাইপ করে এন্টার কী প্রেস করার জন্য অপেক্ষা করবে।

ফলাফল?

আপনি একটি স্ট্রিং পাবেন।

এই স্ট্রিংটি সে কন্টেইন করে যা আপনি (বা ইউজার) টাইপ করেছেন, তাই যদি এই স্ট্রিংকে একটি ভেরিয়েবলে অ্যাসাইন করেন তবে আপনি এটাকে ব্যবহার করতে পারবেন।

একটি সাধারণ উদাহরণ হলো একটি গრিটিং প্রোগ্রাম।

এটি এমন দেখয়:

name = gets.chomp 
puts "Hello #{name}, nice to meet you!"

#{name} জিনিসটিকে স্ট্রিং ইন্টারপোলেশন বলে

এটি ট্রাই করুন এবং নিজেই দেখুন কীভাবে কাজ করে।

  • প্রথমে, এই কোডটি "greeting.rb" ফাইলে সেভ করুন
  • তারপর, "ruby greeting.rb" দিয়ে চালান (একটি টার্মিনাল প্রোগ্রাম থেকে)

আপনার নাম লিখুন এবং আপনার প্রোগ্রাম আপনাকে গরিট করবে!

খুব কুল।

এখন:

এই chomp বাবসা কী?

এটি একটি রুবি মেথড যা gets-এর রেজাল্টকে খুব স্পেসিফিকভাবে পরিবর্তন করে।

এটি সরিয়ে ফেলুন।

এর আগের ডট (.) টিও সরিয়ে ফেলুন, যাতে এটি name = gets হয়, name = gets.chomp না হয়।

আপনি যদি কোড সেভ করে আবার চালান…

আপনি দেখবেন আপনার গরিটিং এখন দুটি লাইনে ভেঙে গেছে, পুরো গরিটিং এক লাইনে থাকার বদলে।

এটা কী হয়েছে?

আসুন বিস্তারিত খোঁজা যাক!

নিউলাইন এবং স্পেশাল ক্যারেক্টার বুঝতে

রুবি আপনি যা টাইপ করেন সেটা gets মেথড এক্টিভ থাকা পর্যন্ত সব পড়ে নেয়।

আমাদের গরিটিং প্রোগ্রাম-এর জন্য, এতে আপনার নাম থাকে।

এবং একটি স্পেশাল "নিউ লাইন" ক্যারেক্টার থাকে যা গরিটিং মেসেজকে দুটি লাইনে ভাঙিয়ে দেয়!

নিউ লাইন ক্যারেক্টারের সাথে পরিচিত হন:

\n

এই ধরনের স্পেশাল ক্যারেক্টারগুলো সাধারণত অস্পষ্ট থাকে এবং শুধু নিউ লাইন, স্পেস, কালার ইত্যাদির রূপে দেখায়।

আপনি যদি এগুলো দেখতে চান তবে আপনার লাগবে ১০,০০০ ডলারের একটি ম্যাজিক ফ্ল্যাশলাইট।

মজা করছি! আপনার লাগবে শুধু p মেথড বা inspect মেথড।

উদাহরণ ব্যবহার:

p name # "Jesus\n"

পেয়ে গেলো! আমাদের "নিউ লাইন" ক্যারেক্টার (\n)।

এটি আমাদের মূল প্রশ্নে ফেরত আনে…

chomp বাবসা কী?

chomp-এর উদ্দেশ্য হলো স্ট্রিংয়ের শেষে থাকা নিউলাইন ক্যারেক্টার রিমুভ করা।

আপনি যেমন দেখলেন, এটি খুবই উপকারী!

আরেকটি উদাহরণ

এই নিউলাইন ক্যারেক্টার, বা অন্য কোনো স্পেশাল ক্যারেক্টার থাকলে, সেটা শুধু স্ট্রিং প্রিন্ট করার সময় কীভাবে দেখাবে সেটাই প্রভাবিত করে না।

এটি আপনার if স্টেটমেন্ট ও প্রভাবিত করতে পারে!

উদাহরণ:

name = gets 
if name == "David" 
  puts "Hello David, we were expecting you!" 
end

এই কোডে, আপনি যদি gets এর সাথে chomp ব্যবহার না করেন, তবে নিউলাইন ক্যারেক্টার (\n) এর কারণে দুটি স্ট্রিং একই হবে না, তাই এটি false ইভ্যালুয়েট করবে।

ব য দ…

এটি gets বাইরের স্ট্রিংর জন্যও প্রযোজ্য, যেমন ডেটাবেস, ফাইল, বা অন্য কোনো সোর্স থেকে পাওয়া ডেটা। এই স্পেশাল ক্যারেক্টারগুলোর ওপর চোখ রাখুন!

Chomp vs Chop vs Strip

ইউজার ইনপুট পরিষ্কার করার জন্য আপনি যেসব মেথড পাবেন সেগুলোর মধ্যে রয়েছে chop এবং strip।

strip দিয়ে আপনি হোয়াইটস্পেস রিমুভ করতে পারেন।

উদাহরণ:

" John Smith ".strip

chop দিয়ে আপনি সর্বদা লাস্ট ক্যারেক্টার রিমুভ করবেন।

প্রথম ক্যারেক্টার রিমুভ করা

আপনার যেকোনো সময় শুরু থেকে ক্যারেক্টার রিমুভ করার দরকার পড়তে পারে।

আপনি এভাবে করতে পারেন:

str = "Mr. John" 
str[0..3] = "" 
str # "John"

এটি প্রথম চারটি ক্যারেক্টার রিমুভ করে।

দুইটি Gets মেথড? প্লট গাঢ় হয়ে যাচ্ছে!

একটি স্পেশাল কেস রয়েছে…

যেখানে আপনাকে শুধু gets এর বদলে $stdin.gets ব্যবহার করতে হবে।

আপনি যদি এমন এরর পান:

`gets': No such file or directory @ rb_sysopen

কেন?

কারণ gets মেথডের দুটি ভার্সন রয়েছে।

  • ডিফল্ট ভার্সন ফাইল নেম পড়ার চেষ্টা করে
  • বিকল্প ভার্সন ($stdin.gets) সবসময় ইউজার ইনপুট থেকে পড়ে

এখন আপনি জানেন, gets ব্যবহার করার সময় আপনি যদি এমন এরর দেখেন, তবে এটি $stdin.gets এ পরিবর্তন করে দেখুন।

সারসংক্ষেপ

আপনি gets এবং chomp মেথড সম্পর্কে শিখলেন, সেগুলো কী করে, কীভাবে কাজ করে, এবং কেন এগুলো উপকারী!

এই রুবি টিউটোরিয়াল দিয়ে শিখতে থাকুন।

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

  1. রুবির grep মেথড মাস্টারিং: কোড উদাহরণসহ একটি ব্যবহারিক গাইড

  2. রুবির Map মেথড মাস্টারিং: উদাহরণসহ একটি ব্যবহারিক গাইড

  3. রুবি Struct ও OpenStruct: দক্ষ ভ্যালু অবজেক্টস

  4. রুবি অ্যারে 습득: প্র্যাক্টিক্যাল উদাহরণ এবং অপরিহার্য মেথডগুলো