تعلم روبي في 10 دقائق
روبي هي لغة برمجة ديناميكية موجهة للكائنات معروفة بتركيبها الأنيق وميزاتها الصديقة للمطورين. يغطي هذا البرنامج التعليمي المفاهيم الأساسية لروبي لمساعدتك على تعلم اللغة بسرعة.
1. كتابة أول برنامج روبي
لنبدأ ببرنامج بسيط. أنشئ ملفًا باسم hello.rb
وأدخل الكود التالي:
puts "Hello, World!"
احفظ الملف وقم بتشغيل الأمر التالي في الطرفية:
ruby hello.rb
سيكون الناتج:
Hello, World!
هذا البرنامج البسيط يوضح وظيفة الإخراج الأساسية في روبي. تُستخدم الدالة puts
لعرض المعلومات النصية في وحدة التحكم.
2. التركيب الأساسي
تركيب روبي نظيف وقابل للقراءة، مصمم ليكون طبيعيًا وبديهيًا.
# هذا تعليق
puts "Hello, World!"
القواعد الأساسية للتركيب في روبي:
- التعليقات: تبدأ التعليقات ذات السطر الواحد بـ
#
، بينما تستخدم التعليقات متعددة الأسطر=begin
و=end
. - الجمل: عادةً جملة واحدة لكل سطر، لا حاجة لفاصلة منقوطة
;
في النهاية. - كتل الكود: تُحدد بـ
do...end
أو الأقواس المعقوفة{}
. - استدعاءات الدوال: الأقواس اختيارية لاستدعاءات الدوال بدون وسائط.
مثال مع التعليقات متعددة الأسطر:
=begin
هذا تعليق متعدد الأسطر،
يمتد عبر عدة أسطر.
=end
3. المتغيرات وأنواع البيانات
في روبي، المتغيرات ذات نوع ديناميكي ولا تتطلب إعلانات نوع صريحة.
قواعد تسمية المتغيرات الأساسية:
- يمكن أن تحتوي أسماء المتغيرات على أحرف وأرقام وشرطات سفلية فقط.
- لا يمكن أن تبدأ أسماء المتغيرات برقم.
- أسماء المتغيرات حساسة لحالة الأحرف.
- لا يمكن استخدام كلمات روبي المحجوزة كأسماء متغيرات.
أنواع البيانات الأساسية الرئيسية في روبي هي:
- عدد صحيح (Integer): مثل
42
أو-10
. - عدد عشري (Float): مثل
3.14
أو2.5e3
. - سلسلة نصية (String): مثل
"hello"
أو'world'
، باستخدام علامات تنصيص مفردة أو مزدوجة. - منطقي (Boolean):
true
أوfalse
. - لا شيء (Nil): يمثله
nil
، يشير إلى قيمة فارغة أو لا شيء. - رمز (Symbol): مثل
:name
، معرفات غير قابلة للتغيير.
3.1 الأنواع العددية
تدعم روبي الأعداد الصحيحة والأعداد العشرية.
# عدد صحيح
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 = "أليس"
greeting = "مرحبًا، #{name}!"
puts greeting # "مرحبًا، أليس!"
عمليات السلسلة النصية:
text = "برمجة روبي"
puts text.length # طول السلسلة
puts text.upcase # تحويل إلى أحرف كبيرة
puts text.downcase # تحويل إلى أحرف صغيرة
puts text[0] # الوصول إلى الحرف الأول
puts text[0..3] # تقطيع السلسلة
puts text.include?("روبي") # التحقق من الوجود
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. هياكل البيانات
توفر روبي عدة هياكل بيانات مدمجة لتخزين ومعالجة البيانات.
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: "جون",
age: 20,
major: "علوم الحاسوب"
}
# الوصول إلى الهاش وتعديله
puts student[:name]
student[:age] = 21
student[:gpa] = 3.8
# التكرار عبر الهاش
student.each do |key, value|
puts "#{key}: #{value}"
end
5. التحكم في التدفق
توفر روبي عدة جمل للتحكم في التدفق لإدارة تنفيذ البرنامج.
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 الحلقات
تدعم روبي عدة تركيبات للحلقات.
حلقة 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 = ["تفاح", "موز", "كرز"]
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. الدوال
تُعرَّف الدوال في روبي باستخدام الكلمة المفتاحية def
.
تعريف الدالة الأساسي:
def greet(name)
"مرحبًا، #{name}!"
end
# استدعاء الدالة
message = greet("جون")
puts message
المعاملات الافتراضية:
def greet(name, greeting = "مرحبًا")
"#{greeting}, #{name}!"
end
puts greet("أليس") # "مرحبًا، أليس!"
puts greet("بوب", "أهلاً") # "أهلاً، بوب!"
معاملات متغيرة:
def sum_numbers(*numbers)
numbers.sum
end
puts sum_numbers(1, 2, 3, 4) # 10
معاملات الكلمة المفتاحية:
def create_person(name:, age:, city: "غير معروف")
{ name: name, age: age, city: city }
end
person = create_person(name: "أليس", age: 25)
puts person.inspect
7. الكتل و Procs
الكتل هي أجزاء من الكود يمكن تمريرها إلى الدوال.
استخدام الكتل:
# استخدام do...end
3.times do
puts "مرحبًا!"
end
# استخدام الأقواس المعقوفة
3.times { puts "مرحبًا!" }
# كتل بمعاملات
(1..3).each do |number|
puts "الرقم: #{number}"
end
كلمة yield المفتاحية:
def run_block
puts "قبل الكتلة"
yield
puts "بعد الكتلة"
end
run_block { puts "داخل الكتلة" }
Procs:
Procs هي كائنات تغلف الكتل.
square = Proc.new { |x| x * x }
puts square.call(5) # 25
# تمرير Procs إلى الدوال
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. الفئات والكائنات
روبي هي لغة موجهة للكائنات بحتة حيث كل شيء هو كائن.
تعريف الفئة الأساسي:
class Person
def initialize(name, age)
@name = name
@age = age
end
def introduce
"أنا #{@name}، عمري #{@age} سنة"
end
def have_birthday
@age += 1
"#{@name} احتفل بعيد ميلاده، عمره الآن #{@age} سنة"
end
end
# إنشاء الكائنات
person1 = Person.new("جون", 25)
person2 = Person.new("جين", 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("أليس", 25, "نيويورك")
puts person.name # "أليس"
person.age = 26 # تعيين العمر
person.city = "بوسطن" # تعيين المدينة
puts person.city # "بوسطن"
دوال الفئة والمتغيرات:
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("جون")
student2 = Student.new("جين")
puts Student.student_count # 2
التوريث:
class Animal
def initialize(name)
@name = name
end
def speak
"#{@name} يصدر صوتًا"
end
end
class Dog < Animal
def speak
"#{@name} ينبح"
end
end
class Cat < Animal
def speak
"#{@name} يموء"
end
end
dog = Dog.new("باددي")
cat = Cat.new("ميمي")
puts dog.speak # "باددي ينبح"
puts cat.speak # "ميمي يموء"
9. الوحدات و Mixins
تُستخدم الوحدات لتجميع الدوال والثوابت المرتبطة، ويمكن مزجها في الفئات.
تعريف الوحدة:
module Speakable
def speak
"#{@name} يقول شيئًا"
end
end
class Person
include Speakable
def initialize(name)
@name = name
end
end
person = Person.new("أليس")
puts person.speak # "أليس يقول شيئًا"
تسمية النطاقات باستخدام الوحدات:
module Math
PI = 3.14159
def self.square(x)
x * x
end
end
puts Math::PI # 3.14159
puts Math.square(5) # 25
10. معالجة الاستثناءات
توفر روبي معالجة قوية للاستثناءات باستخدام 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. عمليات الملفات
توفر روبي طرقًا بسيطة لقراءة وكتابة الملفات.
قراءة الملفات:
# قراءة الملف بالكامل
content = File.read("example.txt")
puts content
# قراءة سطر بسطر
File.foreach("example.txt") do |line|
puts line.chomp
end
كتابة الملفات:
# الكتابة إلى ملف
File.write("output.txt", "مرحبًا، روبي!\n")
# الإضافة إلى ملف
File.open("output.txt", "a") do |file|
file.puts "إضافة محتوى جديد."
end
12. الدوال المدمجة المفيدة
تأتي روبي مع العديد من الدوال المدمجة المفيدة.
دوال السلسلة النصية:
text = " برمجة روبي "
puts text.strip # إزالة المسافات البيضاء
puts text.split(" ") # تقسيم إلى مصفوفة
puts text.gsub("روبي", "بايثون") # استبدال
دوال المصفوفة:
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: "أليس", age: 25, city: "نيويورك" }
puts person.keys.inspect # [:name, :age, :city]
puts person.values.inspect # ["أليس", 25, "نيويورك"]
puts person.has_key?(:age) # true
13. جيمات روبي
RubyGems هو مدير الحزم في روبي لتثبيت وإدارة المكتبات.
تثبيت الجيمات:
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. دليل نمط روبي
لدى روبي دليل نمط مجتمعي قوي يشجع على كتابة كود نظيف وقابل للقراءة.
المسافات البادئة: استخدم مسافتين للمسافات البادئة.
اتفاقيات التسمية:
- المتغيرات والدوال:
snake_case
- الفئات والوحدات:
CamelCase
- الثوابت:
SCREAMING_SNAKE_CASE
الأقواس: استخدم الأقواس لاستدعاءات الدوال ذات المعاملات، احذفها لاستدعاءات الدوال بدون معاملات.
الكتل: استخدم do...end
للكتل متعددة الأسطر، {}
للكتل ذات السطر الواحد.
يجعل تركيب روبي الأنيق وميزاته القوية العمل معه ممتعًا. جعل تركيزه على سعادة المطور والإنتاجية شائعًا في تطوير الويب، والبرمجة النصية، ومهام الأتمتة.