Ruby je interpretovaný, dynamický, reflektivní, objektově orientovaný programovací jazyk. Ruby, který vyvinul Yukihiro Matsumoto, se zaměřuje na jednoduchost a produktivitu. Elegantní syntaxe umožňuje vývojářům snadněji číst a psát kód.
V tomto návodu budeme pracovat s řetězci v Ruby.
Požadavky
K provedení kroků ukázaných v tomto návodu potřebujete následující komponenty:
- Správně nakonfigurovaný systém Ubuntu. Zjistěte více o konfiguraci vlastního serveru Ubuntu na CloudSigma.
- Jakýkoli moderní textový editor, nejlépe se zvýrazněním syntaxe, například VS Code, Sublime Text, Atom, Brackets, Vim, atd.
Datový typ řetězec
V programování je řetězecběžný datový typ, který podporuje každý moderní programovací jazyk. Je charakterizován posloupností znaků. Celá posloupnost znaků je považována za jediný datový prvek. Řetězec může obsahovat písmena, číslice a speciální znaky/symboly.
Ruby, jakožto čistě objektově orientovaný programovací jazyk, považuje řetězce za objekty. Na rozdíl od mnoha jiných jazyků jsou řetězce v Ruby měnitelné. Hodnotu řetězce lze v zásadě změnit přímo na místě.
Krok 1 – Vytváření a tisk řetězců
V Ruby jsou řetězce ohraničeny buď jednoduchými uvozovkami ( ') nebo dvojitými uvozovkami ( "). Následující dva řetězce jsou v Ruby platné:
|
1 2 |
'the quick brown fox' "jumps over the lazy dog" |
Pro výpis jakéhokoli výstupu na obrazovku konzole má Ruby k dispozici print metodu:
|
1 2 |
print 'the quick brown fox' print "jumps over the lazy dog" |
Je čas uvést to do praxe. Vytvořte nový Ruby soubor practice.rb a zadejte následující kód:
Spusťte kód:
|
1 |
ruby practice.rb |
Podle očekávání print příkaz vypíše zadané řetězce. Pokud chceme řetězce vypsat na samostatné řádky, je lepší použít puts namísto toho. Aktualizujte kód:
|
1 2 |
puts 'the quick brown fox' puts "jumps over the lazy dog" |
Poté kód spusťte znovu:
|
1 |
ruby practice.rb |
Krok 2 – Řetězcové proměnné
Proměnné jsou názvy odkazující na konkrétní místo v paměti počítače, kde je uložena hodnota. Požadovanou hodnotu můžeme uložit do proměnné a použít ji později.
V Ruby deklarujete řetězcovou proměnnou tak, že definujete název proměnné a přiřadíte jí řetězcovou hodnotu:
|
1 |
<variable_name> = <string> |
Napište následující kód do practice.rb:
|
1 2 3 4 |
first_half = 'the quick brown fox' second_half = "jumps over the lazy dog" puts first_half puts second_half |
Spusťte kód:
|
1 |
ruby practice.rb |
Zde:
- Definovali jsme dvě proměnné first_half a second_half, přičemž každé z nich je přiřazena řetězcová hodnota.
- Metoda puts metoda vypíše hodnotu proměnných.
Krok 3 – Zřetězení řetězců
Zřetězením můžeme vzít více řetězců a spojit je dohromady, abychom vytvořili nový řetězec. Zřetězení řetězců je označeno operátorem zřetězení ( +). Všimněte si, že tento symbol je také operátorem sčítání při práci s aritmetickými operacemi.
Zkusme provést zřetězení řetězců na řetězcích, které jsme dosud deklarovali:
|
1 |
puts "the quick brown fox" + "jumps over the lazy dog" |
Spusťte kód:
|
1 |
ruby practice.rb |
Jak ukazuje výstup, zřetězení nevkládá mezi řetězce žádný znak navíc. Proto fox a jumps jsou spojeny dohromady. Můžeme to napravit vložením mezery za fox:
|
1 |
puts "the quick brown fox " + "jumps over the lazy dog" |
Spusťte kód:
|
1 |
ruby practice.rb |
Nyní vypadá výstup lépe.
Zřetězení řetězců funguje také s proměnnými. Podívejte se na následující příklad:
|
1 2 |
first_half = "rychlá hnědá liška " puts first_half + "přeskočí líného psa" |
Spusťte kód:
|
1 |
ruby practice.rb |
Následující příklad ukazuje dlouhý řetězec zřetězení:
|
1 2 3 |
username = "cloudsigma" fav_color = "modrá" puts "ahoj, " + username + "! vaše oblíbená barva je " + fav_color + "." |
Spusťte kód:
|
1 |
ruby practice.rb |
Zatím jsme se zabývali pouze řetězcovými proměnnými. Co kdyby existovaly různé typy proměnných? Následující program tento scénář otestuje:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id |
Při pokusu o spuštění tohoto programu Ruby vyhodí chybovou zprávu:
|
1 |
ruby practice.rb |
Nicméně, abychom se tomuto problému vyhnuli, můžeme celé číslo převést na řetězec:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id.to_s |
Zde:
-
Metoda to_spřevede hodnotu proměnné na řetězec.
Převod čísel na řetězce je běžným jevem při práci s prvky, jako jsou PSČ, měna, telefonní čísla a další číselná data.
Krok 4 – Interpolace řetězců
Ačkoli je spojování řetězců mocná funkce, může se velmi snadno zkomplikovat. V mnoha situacích pravděpodobně zjistíte, že vám chybí operátor spojování ( +), což vede k velkým nepříjemnostem. Navíc při práci s různými datovými typy je nutné je nejprve převést na řetězec. Naštěstí Ruby nabízí jiné způsoby vkládání hodnot proměnných do řetězce pomocí funkce interpolace řetězců.
Takhle to vypadá. Například místo použití:
|
1 |
"ahoj, " + username + "!" |
Budeme používat:
|
1 |
"ahoj, #{username}!" |
I když může syntaxe vypadat trochu zvláštně, dramaticky zjednodušuje kód. Není nutné ručně volat to_s metodu pro převod hodnoty proměnné na řetězec.
Pojďme použít tuto novou techniku k aktualizaci našeho předchozího kódu:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts "ahoj, #{username}! tvoje uživatelské ID je #{user_id}" |
Spusťte kód:
|
1 |
ruby practice.rb |
Krok 5 – Řetězcové literály a řetězcové hodnoty
Všimněte si, že řetězce deklarované v kódu jsou vždy obklopeny uvozovkami. Při výpisu výstupu na obrazovku konzole se však uvozovky nezobrazují. Je mezi nimi jasný rozdíl.
- Řetězcový literál: Je to řetězec zapsaný ve zdrojovém kódu (včetně uvozovek).
- Řetězcová hodnota: Je to hodnota, která se vypíše na výstup (bez uvozovek).
Například následující je řetězcový literál:
|
1 |
"hello world" |
Jeho řetězcová hodnota by byla hello svět.
Krok 6 – Escapování uvozovek a apostrofů
Jak jsme si ukázali, uvozovky a apostrofy se používají k označení řetězců ve zdrojovém kódu. To představuje problém: nemůžete je mít přímo v řetězci. V opačném případě to způsobí problémy. Následující kód to demonstruje:
|
1 |
puts 'it's what it is' |
Existují různé způsoby, jak tento problém obejít.
-
Použití alternativní syntaxe řetězců
Jedná se o nejjednodušší způsob, jak tento problém obejít. Pokud váš řetězec vyžaduje jednoduché uvozovky, použijte v řetězcovém literálu dvojité uvozovky (a naopak).
Pojďme opravit předchozí příklad:
|
1 |
puts "je to tak, jak to je" |
Dalším příkladem by mohlo být:
|
1 |
puts 'řekl: "ahoj světe"' |
To však nebude fungovat v každé situaci. Například:
|
1 |
puts "Clousdigma říká, "J'sem a šťastný kluk!"" |
-
Použití escape znaků
Zpětné lomítko ( \) znak se často označuje jako escape znak. Zabraňuje Ruby interpretovat následující znak doslovně. Pojďme opravit předchozí příklad. Použijte zpětné lomítko, abyste zabránili Ruby interpretovat vnitřní dvojité uvozovky jako literály:
|
1 |
puts "Cloudsigma říká, \"Jsem šťastný kluk!\"" |
-
Použití alternativní syntaxe
Zatím jsme pracovali pouze s jednoduchými a dvojitými uvozovkami k označení řetězcového literálu. Předchozí příklady jsou však jednoduchou ukázkou toho, jak se to může velmi rychle vymknout kontrole. Chceme-li tento problém vyřešit, můžeme uvozovky úplně zahodit a k označení začátku a konce řetězce použít zcela jiný symbol.
Podívejte se na následující příklad:
|
1 |
%$ta rychlá hnědá liška řekla, "Skočil jsem přes líného psa"$ |
Zde:
-
- Symbol % definuje další znak ( $, v tomto případě) jako oddělovač řetězce.
- Řetězcový literál je zde $ta rychlá hnědá liška řekla, "Skočil jsem přes líného psa"$.
Pojďme to uvést do praxe:
|
1 |
puts %$ta rychlá hnědá liška řekla, "Skočil jsem přes líného psa"$ |
Zde se s řetězcem v podstatě zachází následovně:
|
1 |
"ta rychlá hnědá liška řekla, \"Skočil jsem přes líného psa\"" |
To však znovu přináší problém s escapováním oddělovače, pokud je použit v řetězci. Jedním ze způsobů, jak se tomu vyhnout, je použití symbolů, které se v řetězcích obvykle nevyskytují. Mezi takové symboly mohou patřit složené závorky, hranaté závorky atd.:
|
1 |
puts %{"ahoj, světe!", on řekl} |
Funguje to také skvěle s interpolací řetězců:
|
1 2 3 |
username = "cloudsigma" user_id = 5 puts %{ahoj, #{username}.#{user_id}!} |
Je také běžné používat %Q{} a %q{} k definování řetězců v programech v Ruby. Zde %Q{} se chová jako dvojité uvozovky a %q{} se chová jako jednoduché uvozovky.
Krok 7 – Nové řádky a dlouhé řetězce
Při práci s řetězci nastanou situace, kdy budete chtít do řetězce vložit nový řádek nebo návrat vozíku (carriage return). Můžeme tak učinit vložením escape znaků \n (nový řádek) a \r (návrat vozíku).
Podívejte se na následující příklad:
|
1 2 |
hello_world = "the quick\nbrown fox\njumps over\nthe lazy dog" puts hello_world |
Tento řetězcový literál vypadá nepřehledně, že? Pojďme ho přeuspořádat pro lepší čitelnost:
|
1 2 3 4 5 6 7 |
hello_world = "the quick\n" + "brown fox\n" + "jumps over\n" + "the lazy dog" puts hello_world |
Místo ručního deklarování znaků nového řádku můžeme použít také následující strukturu:
|
1 2 3 4 5 6 |
hello_world = "rychlá hnědá liška přeskakuje líného psa" puts hello_world |
V této metodě si řetězec zachovává všechny bílé znaky. To však kazí výstup. Chcete-li to opravit, odstraňte přebytečné bílé znaky:
|
1 2 3 4 5 |
hello_world = "rychlá hnědá liška přeskakuje líného psa" |
I když byl problém s bílými znaky vyřešen, snižuje to čitelnost kódu. Tento problém můžeme vyřešit implementací heredoc, což je označení pro víceřádkové řetězcové literály. Aktualizovaný kód by vypadal takto:
|
1 2 3 4 5 6 7 8 |
hello_world = <<-END ta rychlá hnědá liška skáče přes toho líného psa END puts hello_world |
Počínaje verzí Ruby v2.3 a novější je k dispozici další funkce nazvaná vlnitá heredoc syntaxe. Odstraňuje úvodní prázdné znaky v řetězcích. Chcete-li vyjádřit vlnitý heredoc, nahraďte spojovník ( -) s vlnovkou ( ~):
|
1 2 3 4 5 6 7 8 |
hello_world = <<~END the quick brown fox jumps over the lazy dog END puts hello_world |
Krok 8 – Replikování řetězců
V některých situacích může být nutné opakovat řetězec několikrát. Ruby umožňuje replikovat řetězce různými způsoby.
Jednou z takových technik je použití * operátor. Obecně se používá jako operátor násobení při práci s čísly. Při práci s řetězci se však stává operátorem replikace řetězců, který opakuje jeden řetězec tolikrát, kolikrát je potřeba. Počet opakování musí být celé číslo.
V následujícím příkladu bude text Boris opakován 5krát:
|
1 |
print "Boris" * 5 + "\n" |
Pomocí této funkce můžeme vytvořit skvělé ASCII umění. Podívejte se na následující příklad:
|
1 2 3 |
puts "=" * 15 puts "| hello world |" puts "=" * 15 |
Závěrečné myšlenky
Řetězce jsou v programování naprosto zásadní. Tento průvodce ukazuje práci s řetězci v jazyce Ruby. Naučili jsme se, jak řetězce vytvářet a provádět různé operace, jako je spojování, práce s novými řádky, uvozovkami atd. Pomocí interpolace řetězců jsme se také naučili, jak lépe začlenit hodnoty proměnných do řetězců. Pomocí operátoru replikace řetězců můžeme také jeden řetězec opakovat vícekrát.
Ačkoli je Ruby sám o sobě vynikající programovací jazyk, často se kombinuje s frameworkem Rails. Ruby on Rails je open-source framework pro webové aplikace. Zjistěte více o instalaci Ruby on Rails na Ubuntu. Ruby však může fungovat i s jinými aplikacemi, jako jsou MySQL a PostgreSQL.
Příjemnou práci!












































Komentáře
Zatím žádné komentáře. Buďte první.