Learn in 10 minutes

Learn in 10 minutes

10 मिनट में Ruby सीखें

Ruby एक डायनामिक, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है जो अपनी सुरुचिपूर्ण सिंटैक्स और डेवलपर-फ्रेंडली विशेषताओं के लिए जानी जाती है। यह ट्यूटोरियल Ruby की मुख्य अवधारणाओं को कवर करता है ताकि आप जल्दी से भाषा सीख सकें।

1. अपना पहला Ruby प्रोग्राम लिखना

आइए एक सरल प्रोग्राम से शुरू करते हैं। hello.rb नाम की एक फाइल बनाएं और निम्नलिखित कोड दर्ज करें:

puts "Hello, World!"

फाइल को सेव करें और टर्मिनल में निम्नलिखित कमांड चलाएं:

ruby hello.rb

आउटपुट होगा:

Hello, World!

यह सरल प्रोग्राम Ruby की बेसिक आउटपुट फंक्शनैलिटी को दर्शाता है। puts मेथड का उपयोग कंसोल में टेक्स्ट जानकारी प्रदर्शित करने के लिए किया जाता है।

2. बेसिक सिंटैक्स

Ruby की सिंटैक्स साफ और पठनीय है, जिसे प्राकृतिक और सहज बनाने के लिए डिज़ाइन किया गया है।

# यह एक कमेंट है
puts "Hello, World!"

Ruby में बेसिक सिंटैक्स नियम:

  • कमेंट्स: सिंगल-लाइन कमेंट्स # से शुरू होते हैं, जबकि मल्टी-लाइन कमेंट्स =begin और =end का उपयोग करते हैं।
  • स्टेटमेंट्स: आमतौर पर प्रति लाइन एक स्टेटमेंट, अंत में सेमीकोलन ; की आवश्यकता नहीं होती।
  • कोड ब्लॉक्स: do...end या कर्ली ब्रेसिज {} द्वारा परिभाषित।
  • मेथड कॉल्स: बिना आर्गुमेंट वाली मेथड कॉल्स के लिए पैरेंथेसिस वैकल्पिक होते हैं।

मल्टी-लाइन कमेंट्स के साथ उदाहरण:

=begin
यह एक मल्टी-लाइन कमेंट है,
जो कई लाइनों में फैला हुआ है।
=end

3. वेरिएबल्स और डेटा टाइप्स

Ruby में, वेरिएबल्स डायनामिकली टाइप्ड होते हैं और एक्सप्लिसिट टाइप डिक्लेरेशन की आवश्यकता नहीं होती।

बेसिक वेरिएबल नेमिंग नियम:

  • वेरिएबल नामों में केवल अक्षर, संख्याएं और अंडरस्कोर हो सकते हैं।
  • वेरिएबल नाम संख्या से शुरू नहीं हो सकते।
  • वेरिएबल नाम केस-सेंसिटिव होते हैं।
  • Ruby कीवर्ड्स का उपयोग वेरिएबल नाम के रूप में नहीं किया जा सकता।

Ruby के मुख्य बेसिक डेटा टाइप्स हैं:

  • इंटीजर (Integer): जैसे, 42 या -10
  • फ्लोट (Float): जैसे, 3.14 या 2.5e3
  • स्ट्रिंग (String): जैसे, "hello" या 'world', सिंगल या डबल कोट्स का उपयोग करके।
  • बूलियन (Boolean): true या false
  • निल (Nil): nil द्वारा प्रस्तुत, जो नल या कोई वैल्यू नहीं होने को इंगित करता है।
  • सिंबल (Symbol): जैसे, :name, अपरिवर्तनीय आइडेंटिफायर्स।

3.1 न्यूमेरिक टाइप्स

Ruby इंटीजर्स और फ्लोटिंग-पॉइंट नंबर्स को सपोर्ट करती है।

# इंटीजर
age = 25
population = 1_000_000  # पठनीयता के लिए अंडरस्कोर

# फ्लोट
temperature = 36.5
pi = 3.14159

# ऑपरेशन्स
puts 10 + 5   # 15
puts 10 / 3   # 3 (इंटीजर डिवीजन)
puts 10.0 / 3 # 3.333... (फ्लोट डिवीजन)

3.2 स्ट्रिंग

स्ट्रिंग्स कैरेक्टर्स के सीक्वेंस होते हैं, जो सिंगल या डबल कोट्स में बंद होते हैं।

single_quote = 'सिंगल कोट स्ट्रिंग'
double_quote = "डबल कोट स्ट्रिंग"
multiline = "यह एक
मल्टी-लाइन स्ट्रिंग है"

# स्ट्रिंग इंटरपोलेशन (केवल डबल कोट्स में)
name = "Alice"
greeting = "Hello, #{name}!"
puts greeting  # "Hello, Alice!"

स्ट्रिंग ऑपरेशन्स:

text = "Ruby programming"
puts text.length        # स्ट्रिंग लेंथ
puts text.upcase        # अपरकेस में कन्वर्ट करें
puts text.downcase      # लोअरकेस में कन्वर्ट करें
puts text[0]            # पहला कैरेक्टर एक्सेस करें
puts text[0..3]         # स्ट्रिंग स्लाइसिंग
puts text.include?("Ruby")  # समावेशन जांचें

3.3 बूलियन टाइप

बूलियन टाइप के दो वैल्यू हैं: true और false

is_active = true
is_complete = false

# बूलियन ऑपरेशन्स
result1 = true && false  # false
result2 = true || false  # true
result3 = !true          # false

3.4 निल टाइप

nil एक नल या कोई-वैल्यू-नहीं स्थिति को प्रस्तुत करता है।

value = nil

if value.nil?
  puts "वैल्यू नल है"
end

3.5 सिंबल

सिंबल्स अपरिवर्तनीय आइडेंटिफायर्स हैं, जिनका उपयोग अक्सर हैशेज में कीज़ के रूप में किया जाता है।

:name
:email
:created_at

# सिंबल्स बनाम स्ट्रिंग्स
puts :name.object_id == :name.object_id  # true (समान ऑब्जेक्ट)
puts "name".object_id == "name".object_id  # false (भिन्न ऑब्जेक्ट्स)

4. डेटा स्ट्रक्चर्स

Ruby डेटा को स्टोर और मैनिपुलेट करने के लिए कई बिल्ट-इन डेटा स्ट्रक्चर्स प्रदान करती है।

4.1 ऐरे

एक ऐरे एक ऑर्डर्ड कलेक्शन है जो कई वैल्यूज़ को होल्ड कर सकता है।

numbers = [1, 2, 3, 4, 5]
numbers.push(6)        # एलिमेंट जोड़ें
numbers.unshift(0)     # शुरुआत में इन्सर्ट करें
numbers.delete(3)      # विशिष्ट वैल्यू हटाएं
numbers[0] = 10        # एलिमेंट मॉडिफाई करें
puts numbers.inspect   # [10, 2, 4, 5, 6]

ऐरे ऑपरेशन्स:

numbers = [10, 20, 30, 40, 50]
puts numbers[1..3]     # [20, 30, 40]
puts numbers.first     # 10
puts numbers.last      # 50
puts numbers.include?(30)  # true

4.2 हैश

एक हैश की-वैल्यू पेयर्स का एक कलेक्शन है, जो अन्य भाषाओं में डिक्शनरीज़ के समान है।

student = {
  name: "John",
  age: 20,
  major: "Computer Science"
}

# हैश को एक्सेस और मॉडिफाई करना
puts student[:name]
student[:age] = 21
student[:gpa] = 3.8

# हैश पर इटरेट करना
student.each do |key, value|
  puts "#{key}: #{value}"
end

5. कंट्रोल फ्लो

Ruby प्रोग्राम एक्जीक्यूशन को मैनेज करने के लिए कई कंट्रोल फ्लो स्टेटमेंट्स प्रदान करती है।

5.1 if स्टेटमेंट्स

if स्टेटमेंट एक कंडीशन का मूल्यांकन करता है और यदि कंडीशन सच है तो इसके ब्लॉक को एक्जीक्यूट करता है।

age = 20
if age >= 18
  puts "वयस्क"
elsif age >= 13
  puts "किशोर"
else
  puts "बच्चा"
end

# वन-लाइन if
puts "वयस्क" if age >= 18

5.2 unless स्टेटमेंट्स

unless if का विपरीत है - जब कंडीशन गलत होती है तो एक्जीक्यूट करता है।

age = 15
unless age >= 18
  puts "वयस्क नहीं"
end

# वन-लाइन unless
puts "वयस्क नहीं" unless age >= 18

5.3 case स्टेटमेंट्स

case स्टेटमेंट्स मल्टीपल कंडीशन्स को हैंडल करने का एक साफ तरीका प्रदान करते हैं।

grade = "B"

case grade
when "A"
  puts "उत्कृष्ट"
when "B"
  puts "अच्छा"
when "C"
  puts "औसत"
else
  puts "सुधार की आवश्यकता"
end

5.4 लूप्स

Ruby विभिन्न लूप कंस्ट्रक्ट्स को सपोर्ट करती है।

while लूप:

count = 0
while count < 5
  puts count
  count += 1
end

until लूप:

count = 0
until count >= 5
  puts count
  count += 1
end

for लूप:

for i in 0..4
  puts i
end

each इटरेटर:

(0..4).each do |i|
  puts i
end

# ऐरेज़ के साथ
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
  puts fruit
end

break और next:

(0..9).each do |i|
  break if i == 5     # लूप से बाहर निकलें
  next if i % 2 == 0  # इवन नंबर्स को स्किप करें
  puts i              # आउटपुट: 1, 3
end

6. मेथड्स

Ruby में मेथड्स def कीवर्ड का उपयोग करके परिभाषित की जाती हैं।

बेसिक मेथड डेफिनिशन:

def greet(name)
  "Hello, #{name}!"
end

# मेथड को कॉल करना
message = greet("John")
puts message

डिफॉल्ट पैरामीटर्स:

def greet(name, greeting = "Hello")
  "#{greeting}, #{name}!"
end

puts greet("Alice")          # "Hello, Alice!"
puts greet("Bob", "Hi")      # "Hi, Bob!"

वेरिएबल आर्गुमेंट्स:

def sum_numbers(*numbers)
  numbers.sum
end

puts sum_numbers(1, 2, 3, 4)  # 10

कीवर्ड आर्गुमेंट्स:

def create_person(name:, age:, city: "Unknown")
  { name: name, age: age, city: city }
end

person = create_person(name: "Alice", age: 25)
puts person.inspect

7. ब्लॉक्स और प्रोक्स

ब्लॉक्स कोड के चंक्स हैं जिन्हें मेथड्स में पास किया जा सकता है।

ब्लॉक्स का उपयोग:

# do...end का उपयोग करके
3.times do
  puts "Hello!"
end

# कर्ली ब्रेसिज का उपयोग करके
3.times { puts "Hello!" }

# पैरामीटर्स के साथ ब्लॉक्स
(1..3).each do |number|
  puts "Number: #{number}"
end

यील्ड कीवर्ड:

def run_block
  puts "ब्लॉक से पहले"
  yield
  puts "ब्लॉक के बाद"
end

run_block { puts "ब्लॉक के अंदर" }

प्रोक्स:

प्रोक्स ऑब्जेक्ट्स हैं जो ब्लॉक्स को एनकैप्सुलेट करते हैं।

square = Proc.new { |x| x * x }
puts square.call(5)  # 25

# मेथड्स में प्रोक्स पास करना
def apply_operation(numbers, operation)
  numbers.map { |n| operation.call(n) }
end

numbers = [1, 2, 3, 4]
squares = apply_operation(numbers, square)
puts squares.inspect  # [1, 4, 9, 16]

8. क्लासेज़ और ऑब्जेक्ट्स

Ruby एक शुद्ध ऑब्जेक्ट-ओरिएंटेड भाषा है जहां हर चीज़ एक ऑब्जेक्ट है।

बेसिक क्लास डेफिनिशन:

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def introduce
    "I am #{@name}, #{@age} years old"
  end

  def have_birthday
    @age += 1
    "#{@name} had a birthday, now #{@age} years old"
  end
end

# ऑब्जेक्ट्स बनाना
person1 = Person.new("John", 25)
person2 = Person.new("Jane", 30)

puts person1.introduce
puts person2.have_birthday

एक्सेसर मेथड्स:

class Person
  attr_reader :name    # रीड एक्सेस
  attr_writer :age     # राइट एक्सेस
  attr_accessor :city  # रीड और राइट एक्सेस

  def initialize(name, age, city)
    @name = name
    @age = age
    @city = city
  end
end

person = Person.new("Alice", 25, "New York")
puts person.name      # "Alice"
person.age = 26       # उम्र सेट करें
person.city = "Boston" # शहर सेट करें
puts person.city      # "Boston"

क्लास मेथड्स और वेरिएबल्स:

class Student
  @@student_count = 0  # क्लास वेरिएबल

  def initialize(name)
    @name = name
    @@student_count += 1
  end

  def self.student_count  # क्लास मेथड
    @@student_count
  end
end

student1 = Student.new("John")
student2 = Student.new("Jane")
puts Student.student_count  # 2

इनहेरिटेंस:

class Animal
  def initialize(name)
    @name = name
  end

  def speak
    "#{@name} makes a sound"
  end
end

class Dog < Animal
  def speak
    "#{@name} barks"
  end
end

class Cat < Animal
  def speak
    "#{@name} meows"
  end
end

dog = Dog.new("Buddy")
cat = Cat.new("Mimi")

puts dog.speak  # "Buddy barks"
puts cat.speak  # "Mimi meows"

9. मॉड्यूल्स और मिक्सिन्स

मॉड्यूल्स का उपयोग संबंधित मेथड्स और कॉन्स्टेंट्स को ग्रुप करने के लिए किया जाता है, और इन्हें क्लासेज़ में मिक्स किया जा सकता है।

मॉड्यूल डेफिनिशन:

module Speakable
  def speak
    "#{@name} says something"
  end
end

class Person
  include Speakable

  def initialize(name)
    @name = name
  end
end

person = Person.new("Alice")
puts person.speak  # "Alice says something"

मॉड्यूल्स के साथ नेमस्पेसिंग:

module Math
  PI = 3.14159

  def self.square(x)
    x * x
  end
end

puts Math::PI        # 3.14159
puts Math.square(5)  # 25

10. एक्सेप्शन हैंडलिंग

Ruby begin, rescue, ensure, और raise का उपयोग करके रोबस्ट एक्सेप्शन हैंडलिंग प्रदान करती है।

बेसिक एक्सेप्शन हैंडलिंग:

begin
  result = 10 / 0
rescue ZeroDivisionError => e
  puts "शून्य से विभाजन नहीं कर सकते: #{e.message}"
else
  puts "विभाजन सफल"
ensure
  puts "यह हमेशा चलता है"
end

एक्सेप्शन्स रेज़ करना:

def divide(a, b)
  raise "शून्य से विभाजन नहीं कर सकते" if b == 0
  a / b
end

begin
  result = divide(10, 0)
rescue => e
  puts "एरर: #{e.message}"
end

11. फाइल ऑपरेशन्स

Ruby फाइल्स को पढ़ने और लिखने के लिए सरल मेथड्स प्रदान करती है।

फाइल्स पढ़ना:

# पूरी फाइल पढ़ें
content = File.read("example.txt")
puts content

# लाइन बाय लाइन पढ़ें
File.foreach("example.txt") do |line|
  puts line.chomp
end

फाइल्स लिखना:

# फाइल में लिखें
File.write("output.txt", "Hello, Ruby!\n")

# फाइल में एपेंड करें
File.open("output.txt", "a") do |file|
  file.puts "नई सामग्री जोड़ रहे हैं।"
end

12. उपयोगी बिल्ट-इन मेथड्स

Ruby के साथ कई उपयोगी बिल्ट-इन मेथड्स आती हैं।

स्ट्रिंग मेथड्स:

text = "  Ruby Programming  "
puts text.strip        # व्हाइटस्पेस हटाएं
puts text.split(" ")   # ऐरे में स्प्लिट करें
puts text.gsub("Ruby", "Python")  # रिप्लेस करें

ऐरे मेथड्स:

numbers = [3, 1, 4, 1, 5, 9, 2]
puts numbers.sort.inspect      # [1, 1, 2, 3, 4, 5, 9]
puts numbers.uniq.inspect      # [3, 1, 4, 5, 9, 2]
puts numbers.select { |n| n > 3 }.inspect  # [4, 5, 9]

हैश मेथड्स:

person = { name: "Alice", age: 25, city: "New York" }
puts person.keys.inspect    # [:name, :age, :city]
puts person.values.inspect  # ["Alice", 25, "New York"]
puts person.has_key?(:age)  # true

13. Ruby जेम्स

RubyGems Ruby का पैकेज मैनेजर है जो लाइब्रेरीज़ को इंस्टॉल और मैनेज करने के लिए है।

जेम्स इंस्टॉल करना:

gem install rails

कोड में जेम्स का उपयोग:

require 'json'

# JSON पार्स करें
json_string = '{"name": "Alice", "age": 25}'
person = JSON.parse(json_string)
puts person["name"]  # "Alice"

# JSON जनरेट करें
person_hash = { name: "Bob", age: 30 }
json_output = JSON.generate(person_hash)
puts json_output  # {"name":"Bob","age":30}

14. Ruby स्टाइल गाइड

Ruby के पास एक मजबूत कम्युनिटी स्टाइल गाइड है जो साफ, पठनीय कोड को बढ़ावा देती है।

इंडेंटेशन: इंडेंटेशन के लिए 2 स्पेस का उपयोग करें।

नेमिंग कन्वेंशन्स:

  • वेरिएबल्स और मेथड्स: snake_case
  • क्लासेज़ और मॉड्यूल्स: CamelCase
  • कॉन्स्टेंट्स: SCREAMING_SNAKE_CASE

पैरेंथेसिस: आर्गुमेंट्स वाली मेथड कॉल्स के लिए पैरेंथेसिस का उपयोग करें, बिना आर्गुमेंट वाली मेथड कॉल्स के लिए छोड़ दें।

ब्लॉक्स: मल्टी-लाइन ब्लॉक्स के लिए do...end का उपयोग करें, सिंगल-लाइन ब्लॉक्स के लिए {} का उपयोग करें।

Ruby की सुरुचिपूर्ण सिंटैक्स और शक्तिशाली विशेषताएं इसे काम करने में आनंददायक बनाती हैं। डेवलपर खुशी और उत्पादकता पर इसका फोकस ने इसे वेब डेवलपमेंट, स्क्रिप्टिंग और ऑटोमेशन टास्क्स के लिए लोकप्रिय बना दिया है।