ورقة Ruby المرجعية
آخر تحديث
Hello World وتشغيل الكود
Ruby لا تحتاج إلى أي قالب نمطي - سطر واحد يعمل.
| العملية | الصياغة |
|---|---|
| الطباعة مع سطر جديد | puts "Hello, World!" |
| الطباعة دون سطر جديد | print "Hello" |
| فحص قيمة | p [1, 2, 3] |
| استيفاء السلاسل النصية | puts "Hi #{name}" |
| تعليق | # this is a comment |
| تعليق متعدد الأسطر | =begin ... =end |
| تشغيل ملف | ruby app.rb |
| صدفة تفاعلية | irb |
المتغيرات والأنواع
Ruby ذات أنواع ديناميكية؛ وكل شيء كائن.
| العملية | الصياغة |
|---|---|
| متغير محلي | age = 30 |
| ثابت | PI = 3.14 |
| متغير نسخة | @name = "Ada" |
| متغير عام | $count = 0 |
| رمز (symbol) | :status |
| Nil / منطقي | nil, true, false |
| فحص النوع | 42.class يُرجع Integer |
| تحويل النوع | "42".to_i, 42.to_s, "3.5".to_f |
السلاسل النصية
السلاسل النصية كائنات قابلة للتغيير بمجموعة دوال ثرية.
| العملية | الصياغة |
|---|---|
| الطول | "hello".length |
| الأحرف الكبيرة / الصغيرة | s.upcase, s.downcase |
| إزالة المسافات | s.strip |
| الاستبدال | s.gsub("a", "b") |
| التقسيم إلى مصفوفة | "a,b,c".split(",") |
| يحتوي سلسلة فرعية | s.include?("ell") |
| تقطيع الأحرف | s[0..2] |
| الدمج | "foo" + "bar", s << "!" |
| التكرار | "ab" * 3 |
| التنسيق | format("%05d", 42) |
المصفوفات
مجموعات مرتّبة ومفهرسة بالأعداد الصحيحة.
| العملية | الصياغة |
|---|---|
| الإنشاء | nums = [1, 2, 3] |
| الوصول بالفهرس | nums[0], nums[-1] |
| الإضافة إلى النهاية | nums.push(4), nums << 4 |
| الإزالة من النهاية | nums.pop |
| الطول | nums.length |
| Map | nums.map { |n| n * 2 } |
| التصفية | nums.select { |n| n.even? } |
| الاختزال | nums.reduce(0) { |sum, n| sum + n } |
| الترتيب | nums.sort |
| الدمج في سلسلة نصية | nums.join(", ") |
التجزئات (Hashes)
مجموعات مفتاح-قيمة، غالبًا مفتاحها رموز.
| العملية | الصياغة |
|---|---|
| الإنشاء | user = { name: "Ada", age: 30 } |
| الوصول إلى قيمة | user[:name] |
| تعيين قيمة | user[:email] = "a@x.com" |
| فحص مفتاح | user.key?(:name) |
| حذف مفتاح | user.delete(:age) |
| المفاتيح / القيم | user.keys, user.values |
| التكرار | user.each { |k, v| puts "#{k}: #{v}" } |
| قيمة افتراضية | Hash.new(0) |
| الدمج | h1.merge(h2) |
التحكم في التدفق
الشروط والحلقات؛ لاحظ المعدّلات اللاحقة في Ruby.
| العملية | الصياغة |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| if سطري (معدّل) | puts "hi" if ready |
| Unless | unless done ... end |
| الشرطي الثلاثي | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| حلقة while | while i < 10 ... end |
| حلقة until | until done ... end |
| Times | 5.times { |i| puts i } |
| التكرار على نطاق | (1..5).each { |i| puts i } |
| Break / next | break, next |
الدوال
آخر تعبير يُرجَع ضمنيًا.
| العملية | الصياغة |
|---|---|
| تعريف دالة | def add(a, b) ... end |
| إرجاع ضمني | def square(x) x * x end |
| وسيط افتراضي | def greet(name = "World") ... end |
| وسائط مفتاحية | def box(w:, h:) ... end |
| Splat (متغيرة الوسائط) | def sum(*nums) ... end |
| دالة تنتهي بـ ? | def valid? ... end |
| دالة تنتهي بـ ! | def normalize! ... end |
| النداء دون أقواس | greet "Ada" |
الكتل و procs و lambdas
الكتل قطع من الكود تُمرَّر إلى الدوال؛ و procs و lambdas تخزّنها.
| العملية | الصياغة |
|---|---|
| كتلة (أقواس معقوفة) | [1, 2].each { |n| puts n } |
| كتلة (do/end) | [1, 2].each do |n| puts n end |
| الاستسلام لكتلة (yield) | def run; yield; end |
| فحص وجود كتلة | block_given? |
| التقاط الكتلة كمعامل | def run(&blk); blk.call; end |
| إنشاء proc | square = proc { |x| x * x } |
| إنشاء lambda | square = ->(x) { x * x } |
| نداء proc / lambda | square.call(3), square.(3) |
الأصناف والوحدات
الأصناف تحمل الحالة والسلوك؛ والوحدات تمزج دوالًا مشتركة.
| العملية | الصياغة |
|---|---|
| تعريف صنف | class Point ... end |
| باني (constructor) | def initialize(x, y) @x = x; @y = y; end |
| دالة نسخة | def dist ... end |
| اختصارات الوصول | attr_accessor :x, :y |
| إنشاء نسخة | p = Point.new(1, 2) |
| الوراثة | class Circle < Shape ... end |
| دالة صنف | def self.origin ... end |
| تعريف وحدة | module Drawable ... end |
| مزج وحدة | include Drawable |
| نداء super | super(args) |
صياغة Ruby التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة Ruby المرجعية هذه هي مرجع سريع للّغة الأساسية - المتغيرات والأنواع، والسلاسل النصية، والمصفوفات والتجزئات، والتحكم في التدفق، والدوال، والكتل و procs و lambdas التي تجعل Ruby معبّرة إلى هذا الحد.
كل ما هنا هو Ruby خالصة تعمل على أيّ مفسّر قياسي. انسخ ما تحتاجه، أو جرّب كل مقطع برمجي مباشرة في playground الخاص بـ Ruby - دون الحاجة إلى أي تثبيت.
الأسئلة الشائعة حول ورقة Ruby المرجعية
هل ورقة Ruby المرجعية هذه مجانية؟
ما الفرق بين الكتلة و proc و lambda؟
{ ... } أو do ... end - وهي ليست كائنًا بذاتها. أمّا proc فيغلّف كتلة في كائن قابل للنداء يمكنك تخزينه وتمريره. و lambda نوع خاص من proc يفحص عدد وسائطه بصرامة ويعامل return على أنه عودة من الـ lambda نفسها، بينما يعود proc العادي من الدالة المحيطة.ما هي الرموز (symbols) في Ruby؟
:name معرّف غير قابل للتغيير وقابل لإعادة الاستخدام. ولأن الرمز نفسه يشير دائمًا إلى الكائن نفسه في الذاكرة، فإن الرموز أسرع وأكثر كفاءةً في الذاكرة من السلاسل النصية لأمور مثل مفاتيح التجزئة وأسماء الدوال - ولهذا كثيرًا ما ترى التجزئات مكتوبةً بصيغة { name: "Ada" }.