Ruby Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World והרצת קוד
Ruby לא צריכה קוד תבנית: שורה אחת מספיקה כדי לרוץ.
| פעולה | תחביר |
|---|---|
| הדפסה עם ירידת שורה | puts "Hello, World!" |
| הדפסה בלי ירידת שורה | print "Hello" |
| בדיקת ערך (inspect) | 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? } |
| צמצום (reduce) | nums.reduce(0) { |sum, n| sum + n } |
| מיון | nums.sort |
| חיבור למחרוזת | nums.join(", ") |
Hashes
אוספים של מפתח וערך, לרוב עם symbols כמפתחות.
| פעולה | תחביר |
|---|---|
| יצירה | 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) |
בקרת זרימה
תנאים ולולאות; שימו לב ל-modifiers שנכתבים בסוף השורה ב-Ruby.
| פעולה | תחביר |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| if בשורה (modifier) | 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 |
| ארגומנטים בשם (keyword) | 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 |
| בנאי | def initialize(x, y) @x = x; @y = y; end |
| מתודת מופע | def dist ... end |
| קיצורי accessor | attr_accessor :x, :y |
| יצירת מופע | p = Point.new(1, 2) |
| ירושה | class Circle < Shape ... end |
| מתודת מחלקה | def self.origin ... end |
| הגדרת מודול | module Drawable ... end |
| שילוב מודול (mixin) | include Drawable |
| קריאה ל-super | super(args) |
התחביר של Ruby שאתם צריכים הכי הרבה, בעמוד אחד. ה-Ruby cheat sheet הזה הוא דף עזר מהיר לליבת השפה: משתנים וטיפוסים, מחרוזות, מערכים ו-hashes, בקרת זרימה, מתודות, והבלוקים, ה-procs וה-lambdas שהופכים את Ruby לשפה כל כך אקספרסיבית.
כל מה שכאן הוא Ruby רגיל שרץ בכל מפרש סטנדרטי. העתיקו את מה שאתם צריכים, או נסו כל קטע קוד בזמן אמת בעורך האונליין של Ruby, בלי להתקין כלום.
שאלות נפוצות על ה-Ruby cheat sheet
האם ה-Ruby cheat sheet הזה חינמי?
מה ההבדל בין block, proc ו-lambda?
{ ... } או do ... end, והוא לא אובייקט בפני עצמו. proc עוטף בלוק באובייקט שאפשר לקרוא לו, לשמור אותו ולהעביר אותו. lambda הוא proc מיוחד שבודק בקפדנות את מספר הארגומנטים ומתייחס ל-return כהחזרה מה-lambda עצמו, בעוד ש-proc רגיל חוזר מהמתודה שעוטפת אותו.מה הם symbols ב-Ruby?
:name הוא מזהה קבוע שאפשר להשתמש בו שוב ושוב. מכיוון שאותו symbol תמיד מצביע לאותו אובייקט בזיכרון, symbols מהירים וחסכוניים יותר בזיכרון ממחרוזות עבור דברים כמו מפתחות של hash ושמות של מתודות, ולכן רואים לעיתים קרובות hashes שנכתבים כך: { name: "Ada" }.