© 2013 All rights reserved.
0

Seriál Ruby on Rails 4: Základy syntaxe II

Volně navazuju na přechozí díl. Pokračuje v popisu vícenásobného přiřazení, rozdíl mezi lokálními a globálními proměnnými, vysvětluje konstanty a pseudo-proměnné jazyka.

Vícenásobné přiřazení

S inicializací proměnných v Ruby jde dělat daleko více. Krom klasického přiřazování jedné hodnoty do jedné proměnné můžeme hromadně nastavovat více proměnných a to vcelku jednoduše.

Podívejte se následující ukázku, která ukazuje jak jednoduše přiřadit více proměnným stejnou hodnotu:

Na prvním řádku vznikají dvě proměnné, které mají hodnotu 4. Tato hodnota je jim nastavena současně. Dále hodnotu proměnné přiřadíme další proměnné s názvem promenna3, jež bude obsahovat stejnou hodnotu jako promenna1.

Aby to nebylo tak jednoduché, ukážeme si ještě další možnost vícenásobného přiřazení hodnot:

Všimněte si, že na rozdíl od předchozího příkladu, kdy jsme do více proměnných naplnili stejnou hodnotu, jsme nyní vytvořili tři proměnné a do každé z nich uložili jinou hodnotu. Rozdíl oproti minulé ukázce spočívá v použití operátoru čárky v seznamu proměnných.

Tento zápis můžeme napsat úplně stejně za pomocí pole (o tom co je to pole se dozvíte více v datových typech):

Ruby automaticky rozpozná, že inicializujeme více proměnných a do každé z nich přiřadí jednu hodnotu z pole.

Nic se nestane ani v případě že se upíšeme a nebude se nám shodovat počet proměnných a počet hodnot, které se mají k proměnným přiřadit, Ruby v tom případě proměnné inicializuje a proměnné, kterým nepřiřadí žádnou hodnotu, budou instance NilClass:

V případě že by byl na levé straně větší počet hodnot než proměnných na straně pravé, budou tyto hodnoty ignorovány a nebude se s nimi pracovat – nepřiřadí se do žádné hodnoty.

Tomuto chování můžeme zabránit jednoduše, prohlídněte si poslední příklad:

Při této inicializaci vzniknou tři proměnné, přičemž poslední z nich bude obsahovat pole všech zbývajících hodnot, které by nebyly přiřazeny žádné proměnné.

Lokální proměnné

V Ruby můžeme používat v základu dva typy proměnných. První z těchto dvou typů proměnných jsou lokální proměnné (druhým typem jsou proměnné globální).

Všechny proměnné, které jsme zatím používali, byly právě lokální. Tyto proměnné, jak název vypovídá, jsou omezeny svou platností, pouze pro lokální použití. Znamená to, že tyto proměnné není možné používat ve všech částech kódu bez omezení, ale jejich platnost v kódu je podmíněna dalšími aspekty.

Prozatím vás jejich přesné využití zajímat nebude, to nastane, až budete schopni vytvořit funkci nebo třídu.

Prozatím si ukážeme na jednoduchém příkladu co se s těmito proměnnými vlastně děje:

V tomto případě skončí překlad chybou, že jsme použili nedefinovanou lokální proměnnou. Je vidět, že i když jsme si v kódu do proměnné se stejným názvem přiřadili hodnotu a proměnnou tedy nadefinovali v místě výpisu, tato proměnná neexistuje a není možné ji používat.

Proměnná je definována ve funkci mojeFunkce, kde je taky její platnost, pouze uvnitř této funkce. Pokud bychom uvnitř funkce chtěli proměnnou vypsat, všechno bude fungovat správně a interpret nebude hlásit žádnou chybu.

Podrobnější pochopení se vám dostane při práci s funkcemi a třídami.

Globální proměnné

Druhým typem proměnných jsou globální proměnné. Na rozdíl od lokálních proměnných mají tyto proměnné platnost v celém programu a můžeme k nim přistupovat kdekoli. Nejsou limitovány svým prostorem.

Globální proměnné jsou uvozeny znakem $ před svým názvem:

Po spuštění tohoto kódu už program neskončí chybou, ale proměnnou, která je sice nadefinována ve funkci vytvorPromennou, normálně vypíše a má k ní přístup.

Nyní si možná říkáte, k čemu jsou lokální proměnné, nebylo by lepší všude používat globální proměnné a ušetřit si tak problémy s řešením platnosti proměnných?

Odpověď rozhodně zní – nebylo. Používání globálních proměnných ve velké míře vede spíše k chybám.

V krátkém programu tuto chybu snadno eliminujete, ale v rozsáhlých programech o stovkách nebo tisících řádek byste určitě narazili na problém s přepisem hodnot proměnných.

Konstanty

Obdobou proměnné je konstanta. Konstanty a proměnné jsou si hodně podobné, co se týká práce a přístupu k nim, až na jeden zásadní rozdíl – konstanta má za celou dobu běhu programu stále stejnou (konstantní) hodnotu, která se nemění. Tato hodnota je do konstanty uložena při inicializaci a není možné ji změnit, pouze používat.

Pro psaní názvů konstant platí opět určitá syntaktická pravidla:

  • název konstanty musí začínat znakem A-Z (pouze velká písmena) název proměnné
  • název musí obsahovat pouze znaky a-z nebo A-Z, čísla nebo podtržítko.

Jak tedy poznáte konstantu od proměnné?

Podle prvního znaku v názvu. Pokud je tento znak velké písmeno, jedná se o konstantu, pokud je uveden malým písmenem, jedná se o proměnnou:

Definovali jsme si konstantu PI, která má po celou dobu běhu programu stejnou hodnotu, protože víme, že hodnota PI se nikdy měnit nebude, a ani nechceme, aby to bylo možné.

Pokud bychom se pokusili hodnotu konstanty změnit, program by skončil chybou:

Pseudo-proměnné

Aby toho nebylo málo, krom klasických proměnných a konstant existují další proměnné, nazývané pseudo proměnné.

Tyto proměnné se chovají zčásti jako proměnné a zčásti jako konstanty. Jejich názvy jsou uvedeny mezi rezervovanými slovy, ale můžeme k nim přistupovat klasicky, jako k jiným proměnným nebo konstantám. Jejich hodnotu ovšem není možné měnit a je nastavována automaticky interpretem jazyka:

self

– vrací aktuální instanci. Význam má hlavně v objektech a objektovém programování

nil

– instance třídy NilClass. Obsahuje nulovou hodnotu. Používá se především k porovnání k nulové hodnotě

true

– instance třídy TrueClass. Obsahuje kladnou hodnotu – pravda. Používá se především k porovnávání s touto hodnotou

false

– instance třídy FalseClass. Jedná se o opak hodnoty true – nepravda. Používá se především k porovnání s touto hodnotou

__FILE__

– hodnota je plněna interpretem jazyka a obsahuje název souboru, ve kterém je tato proměnná volána

__LINE__

– podobně jako __FILE__ je hodnota plněna interpretem jazyka a obsahuje číslo řádku, na kterém tuto proměnnou použijeme

Pseudo proměnné jsou při programování velmi často používány, především pak první 4 (self, nil, true, false), bez kterých se ve svých programech neobejdete.

Proměnné __FILE__ a __LINE__ slouží především pro ladění programu, například zjištění výskytu chyby.

Závěrem

V příští části se podíváme na jednoduché počítání s Ruby.

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836