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?
Tak. Ten Ruby cheat sheet jest całkowicie darmowy i nie wymaga rejestracji. Dodaj go do zakładek i wracaj, gdy potrzebujesz sprawdzić metodę stringa, operację na hashu albo składnię bloku.
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" }.Czy mogę ćwiczyć Ruby online?
Tak. Otwórz edytor online Ruby, aby uruchomić dowolny fragment z tej ściągi w przeglądarce, bez instalowania Ruby. Gdy chcesz nauki krok po kroku, darmowy interaktywny kurs Ruby w Coddy przeprowadzi cię od zmiennych i stringów do bloków i klas.
Czy ta ściąga nadaje się dla początkujących?
Tak. Jest uporządkowana od najczęstszych tematów (zmienne, stringi, instrukcje sterujące) do bardziej zaawansowanych (bloki, proce, klasy), więc górne sekcje przydadzą się od pierwszego dnia, a resztę opanujesz z czasem.