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