Porovnanie Ruby a PHP: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(Vytvorená stránka „Kategória:Bakalárske práce Kategória:Informatika Kategória:Skriptovacie jazyky {{Hlavička_FM|Pokročilé vlastnosti skiptovacích jazykov|Ivana Zuzinová…“)
 
Riadok 3: Riadok 3:
 
[[Kategória:Skriptovacie jazyky]]
 
[[Kategória:Skriptovacie jazyky]]
  
{{Hlavička_FM|Pokročilé vlastnosti skiptovacích jazykov|Ivana Zuzinová|Ing. Juraj Ďuďák|
 
2008/2009
 
|Bakalárska práca
 
|Mechatronika
 
}}
 
 
<div class="sideBox">
 
<div class="sideBox">
 
{| class="" border=0 cellpadding=5
 
{| class="" border=0 cellpadding=5

Verzia zo dňa a času 22:49, 30. december 2009



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:

Tabuľka 3.1.: Základná syntax jazyka PHP a Ruby
  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:

Tabuľka 3.2.: Substitúcia znakov pri dvojitých úvodzovkách
  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.

Tabuľka 3.3.:Funkcie s prázdnymi premennými
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.