Porovnanie Ruby a PHP: Rozdiel medzi revíziami
d |
|||
Riadok 2: | Riadok 2: | ||
[[Kategória:Informatika]] | [[Kategória:Informatika]] | ||
[[Kategória:Skriptovacie jazyky]] | [[Kategória:Skriptovacie jazyky]] | ||
− | + | <H1_CSS chapter="3" /> | |
+ | <H1_CSS chapter="3" prefix="Kapitola" /> | ||
<div class="sideBox"> | <div class="sideBox"> | ||
{| class="" border=0 cellpadding=5 | {| class="" border=0 cellpadding=5 |
Verzia zo dňa a času 17:56, 5. január 2010
1. | Úvod do Ruby on Rails |
2. | Ruby |
3. | Porovnanie Ruby a PHP |
4 | Ruby on Rails |
5 | Praktická aplikácia využívajúca Rails |
6 | Záver |
Obsah
Porovnanie Ruby a PHP
V tejto kapitole uvedieme základné rozdiely, ako aj zhody medzi jazykom Ruby a PHP. Hlavnou odlišnosťou Ruby od PHP je, že Ruby je čisto objektovo orientovaný, takže všetko je objektom, zatiaľ čo PHP používa primitívne dátové typy. Ruby je taktiež na rozdiel od PHP dynamickým jazykom, čo je podľa mnohých výhodou a pre iných nevýhodou (častokrát pre programátorov PHP). Pri statických jazykoch, ako PHP, nie je možné zmeniť už nadefinovanú triedu zásahom „zvonku“. V Ruby je naopak možné triedy a metódy za behu meniť, pridávať, upravovať.
Syntax
Syntax Ruby má tiež určité odlišnosti, vychádzajúce z jeho filozofie. Patrí sem napríklad spôsob oddelenia inštrukcií – kým PHP sa príkazy oddeľujú vždy bodkočiarkou, v Ruby používame bodkočiarku iba v prípade, že chceme napísať viac príkazov v jednom riadku, inak sa nepoužívajú. Príklad:
PHP:
print "Instrukcia";
print "Nasledujuca instrukcia"; print "Dalsia instrukcia";
Ruby:
print "Instrukcia"
puts "Nasledujuca instrukcia" ; puts "Dalsia instrukcia"
Ďalšie porovnanie základnej syntaxe je zhrnuté v nasledujúcej tabuľke:
PHP | Ruby | |
zalomenie riadku | print 1 + 2 + 3; |
print 1 + 2 \ + 3 |
komentáre | # komentár1 // komentár2 /* komentár na viac riadkov */ |
# komentár1 =begin komentár na viac riadkov =end |
čísla s desatinnou čiarkou |
$a = 2.3; $b = .5; $c = 2e-5; |
a = 2.3 b = 0.5 c = 2e-5 |
Znaky
Ruby aj PHP používajú sadu 256 znakov a z hľadika substitúcie znakov v jednoduchých i dvojitých úvodzovkách sú si veľmi podobné, čo ukazuje aj tabuľka 3.2:
PHP | Ruby | |
zalomenie riadku | \n | \n |
spätné lomítko | \\ | \\ |
znak dolára | \$ | $ |
dvojitá úvodzovka | \" | \" |
interpolácia premennej | $premenna | #{premenna} |
NULL (Nil)
Konštanta NULL v PHP je veľmi podobná konštante Nil v Ruby, pretože obe reprezentujú chýbanie hodnoty vnútri premennej. Nil v Ruby je mierne odlišný v tom, že aj on je objektom, tak ako čokoľvek iné v Ruby. Je to objekt, ktorý reprezentuje „nevýskyt“ hodnoty. Príklad:
PHP:
$car = 'red' ;
var_export(is_null($car));
// => false
unset($car);
var_export(is_null($car));
// => true
Ruby :
car = 'red'
p car.nil?
# => false
car = nil
p car.nil?
# => true
Zmena typu
Ruby automaticky nekonvertuje dátové typy tak ako PHP. Preto ak chceme intrepretovať znak ako číslo alebo naopak, musíme predtým vykonať jeho konverziu:
PHP:
print 1.4 + 4;
// => 5.4
print 1.1 + "2";
// => 3.1
print "3" + 5;
// => 8
Ruby :
puts 1.4 + 4
# => 5.4
puts 1.1 + "2"
# => String can't be coerced into Float (TypeError)
puts 1.1 + "2".to_f
# => 3.1
puts "3" + 5
# => can't convert Fixnum into String (TypeError)
puts "3".to_i + 5
# => 8
Premenné
Ruby ponúka viacero typov premenných, tak ako v PHP môžeme použiť lokálne, globálne, statické premenné alebo premenné inštancií. Tieto sme podrobnejšie definovali v predchádzajúcej kapitole, treba ale opäť zmieniť základný rozdiel v zápise lokálnych premenných. V PHP ich píšeme so znakom $ na začiatku, ale v Ruby je premenná začínajúca týmto znakom definovaná ako globálna premenná a lokálna premenná začína podčiarkovníkom alebo malým písmenom. PHP obsahuje okrem toho aj super globálne premenné, ako $_GET, $_POST, $_COOKIE, a $_SESSION. Ruby takéto preddefinované premenné neobsahuje, pretože nebol určený primárne na tvorbu web aplikácií. Preto sú ekvivalenty super globálnych premenných v PHP súčasťou Rails.
isset/empty
V jazyku PHP používame častokrát funkciu isset, aby sme zistili, či bola priradená hodnota premennej. Ruby sa pri vyhodnocovaní, či je premenná správna chová odlišne ako PHP, základné rozdiely sú zhrnuté v tabuľke 3.3.
PHP | empty($x) | is_null($x) | if($x) | isset($x) | |
$x = ""; | TRUE | FALSE | FALSE | TRUE | |
$x = null; | TRUE | TRUE | FALSE | FALSE | |
$x = array() | TRUE | FALSE | FALSE | TRUE | |
$x = false; | TRUE | FALSE | FALSE | TRUE | |
$x = 0; | TRUE | FALSE | FALSE | TRUE | |
$x = "0" | TRUE | FALSE | FALSE | TRUE | |
Ruby | x.empty? | x.nil? | if(x) | x.zero? | |
x = "" | TRUE | FALSE | TRUE | u/m* | |
x = nil | u/m* | TRUE | FALSE | u/m* | |
x = [] | TRUE | FALSE | TRUE | u/m* | |
x = {} | TRUE | FALSE | TRUE | u/m* | |
x = false | u/m* | FALSE | FALSE | u/m* | |
x = 0 | u/m* | FALSE | TRUE | TRUE | |
x = "0" | FALSE | FALSE | TRUE | FALSE |
Vysvetlivky: *n/m - NoMethodError: undefined method
Operátory
Operátory v Ruby sú špecifické tým, že každý z nich je metódou volanou k určitému objektu. V tomto prípade nemusíme pred metódu písať bodku, Ruby k týmto metódam vytvoril vhodnú syntax ktorá je bežne používaná aj u iných jazykov:
Ruby:
puts 1.+(2)
# => 3
puts 1+2
# => 3
puts 'Hello, '.+('World!' )
# => Hello, World!
puts 'Hello, '+'World!'
# => Hello, World!
V Ruby a PHP sú operátory priradenia, aritmetické operátory a bitové operátory používané takmer identicky. V Ruby je možné použiť aj paralelné priradenie viacerých premenných v jednom riadku. Toto je podobné funkcii list s kombináciou funkcie array v PHP. Príklad: PHP:
list($a, $b, $c) = array(1, 2, 3);
print $a; # => 1
print $b; # => 2
print $c; # => 3
Ruby:
a, b, c = 1, 2, 3
puts a # => 1
puts b # => 2
puts c # => 3
V tejto kapitole sme sa pokúsili stručne zhrnúť aspoň základné rozdiely medzi jazykmi Ruby a PHP. Snažili sme sa poukázať na tie odlišnosti, ktoré by mohol prehliadnuť programátor dlhodobo programujúci v jazyku PHP a ktoré by si mal zapamätať. Inak by sa mohol aj na prvý pohľad funkčný kód správať inak, ako by očakával.