Ruby Cheat Sheet: ściąga z Ruby
Ostatnia aktualizacja
Hello World i uruchamianie kodu
Ruby nie wymaga kodu szablonowego: wystarczy jedna linia.
| Operacja | Składnia |
|---|---|
| Wypisanie z nową linią | puts "Hello, World!" |
| Wypisanie bez nowej linii | print "Hello" |
| Podgląd wartości | p [1, 2, 3] |
| Interpolacja stringów | puts "Hi #{name}" |
| Komentarz | # this is a comment |
| Komentarz wieloliniowy | =begin ... =end |
| Uruchomienie pliku | ruby app.rb |
| Powłoka interaktywna | irb |
Zmienne i typy
Ruby ma typowanie dynamiczne; wszystko jest obiektem.
| Operacja | Składnia |
|---|---|
| Zmienna lokalna | age = 30 |
| Stała | PI = 3.14 |
| Zmienna instancji | @name = "Ada" |
| Zmienna globalna | $count = 0 |
| Symbol | :status |
| Nil / wartość logiczna | nil, true, false |
| Sprawdzenie typu | 42.class zwraca Integer |
| Konwersja typu | "42".to_i, 42.to_s, "3.5".to_f |
Stringi
Stringi to mutowalne obiekty z bogatym zestawem metod.
| Operacja | Składnia |
|---|---|
| Długość | "hello".length |
| Wielkie / małe litery | s.upcase, s.downcase |
| Usunięcie białych znaków | s.strip |
| Zamiana | s.gsub("a", "b") |
| Podział na tablicę | "a,b,c".split(",") |
| Zawiera podciąg | s.include?("ell") |
| Wycinek znaków | s[0..2] |
| Łączenie (konkatenacja) | "foo" + "bar", s << "!" |
| Powtórzenie | "ab" * 3 |
| Formatowanie | format("%05d", 42) |
Tablice
Uporządkowane kolekcje indeksowane liczbami całkowitymi.
| Operacja | Składnia |
|---|---|
| Utworzenie | nums = [1, 2, 3] |
| Dostęp przez indeks | nums[0], nums[-1] |
| Dodanie na końcu | nums.push(4), nums << 4 |
| Usunięcie z końca | nums.pop |
| Długość | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtrowanie | nums.select { |n| n.even? } |
| Redukcja | nums.reduce(0) { |sum, n| sum + n } |
| Sortowanie | nums.sort |
| Złączenie w string | nums.join(", ") |
Hashe
Kolekcje klucz-wartość, często z symbolami jako kluczami.
| Operacja | Składnia |
|---|---|
| Utworzenie | user = { name: "Ada", age: 30 } |
| Dostęp do wartości | user[:name] |
| Ustawienie wartości | user[:email] = "a@x.com" |
| Sprawdzenie klucza | user.key?(:name) |
| Usunięcie klucza | user.delete(:age) |
| Klucze / wartości | user.keys, user.values |
| Iteracja | user.each { |k, v| puts "#{k}: #{v}" } |
| Wartość domyślna | Hash.new(0) |
| Scalenie | h1.merge(h2) |
Instrukcje sterujące
Warunki i pętle; zwróć uwagę na modyfikatory końcowe w Ruby.
| Operacja | Składnia |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| If w jednej linii (modyfikator) | puts "hi" if ready |
| Unless | unless done ... end |
| Operator trójargumentowy | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| Pętla while | while i < 10 ... end |
| Pętla until | until done ... end |
| Times | 5.times { |i| puts i } |
| Iteracja po zakresie | (1..5).each { |i| puts i } |
| Break / next | break, next |
Metody
Ostatnie wyrażenie jest zwracane niejawnie.
| Operacja | Składnia |
|---|---|
| Definicja metody | def add(a, b) ... end |
| Niejawne zwrócenie wartości | def square(x) x * x end |
| Argument domyślny | def greet(name = "World") ... end |
| Argumenty nazwane | def box(w:, h:) ... end |
| Splat (zmienna liczba argumentów) | def sum(*nums) ... end |
| Metoda zakończona ? | def valid? ... end |
| Metoda zakończona ! | def normalize! ... end |
| Wywołanie bez nawiasów | greet "Ada" |
Bloki, proce i lambdy
Bloki to fragmenty kodu przekazywane do metod; proce i lambdy je przechowują.
| Operacja | Składnia |
|---|---|
| Blok (klamry) | [1, 2].each { |n| puts n } |
| Blok (do/end) | [1, 2].each do |n| puts n end |
| Przekazanie sterowania do bloku (yield) | def run; yield; end |
| Sprawdzenie, czy podano blok | block_given? |
| Przechwycenie bloku jako parametru | def run(&blk); blk.call; end |
| Utworzenie proca | square = proc { |x| x * x } |
| Utworzenie lambdy | square = ->(x) { x * x } |
| Wywołanie proca / lambdy | square.call(3), square.(3) |
Klasy i moduły
Klasy przechowują stan i zachowanie; moduły dołączają wspólne metody.
| Operacja | Składnia |
|---|---|
| Definicja klasy | class Point ... end |
| Constructor | def initialize(x, y) @x = x; @y = y; end |
| Metoda instancji | def dist ... end |
| Skróty akcesorów | attr_accessor :x, :y |
| Utworzenie instancji | p = Point.new(1, 2) |
| Dziedziczenie | class Circle < Shape ... end |
| Metoda klasy | def self.origin ... end |
| Definicja modułu | module Drawable ... end |
| Dołączenie modułu | include Drawable |
| Wywołanie super | super(args) |
Najczęściej używana składnia Ruby na jednej stronie. Ten Ruby cheat sheet to szybka ściąga z rdzenia języka: zmienne i typy, stringi, tablice i hashe, instrukcje sterujące, metody oraz bloki, proce i lambdy, dzięki którym Ruby jest tak ekspresyjny.
Wszystko tutaj to czysty Ruby, który działa w każdym standardowym interpreterze. Skopiuj to, czego potrzebujesz, albo uruchom każdy fragment w edytorze online Ruby, bez instalacji.
Ruby cheat sheet: FAQ
Czy ten Ruby cheat sheet jest darmowy?
Czym różnią się blok, proc i lambda?
{ ... } lub do ... end; sam w sobie nie jest obiektem. proc opakowuje blok w wywoływalny obiekt, który możesz przechowywać i przekazywać dalej. lambda to specjalny proc, który ściśle sprawdza liczbę argumentów i traktuje return jako wyjście z samej lambdy, podczas gdy zwykły proc wychodzi z otaczającej metody.Czym są symbole w Ruby?
:name, to niemutowalny identyfikator wielokrotnego użytku. Ponieważ ten sam symbol zawsze wskazuje ten sam obiekt w pamięci, symbole są szybsze i oszczędniejsze pamięciowo niż stringi w roli kluczy hasha czy nazw metod. Dlatego hashe często zapisuje się jako { name: "Ada" }.