# Zkouška 23.1.2018

<{ForumPost(poster="TomRiddle", timestamp=2018-01-23 14:42:19)}>
Dneska zadával Robert Husák a zadání bylo dost podobné [http://forum.matfyz.info/viewtopic.php?f=423&t=10757](http://forum.matfyz.info/viewtopic.php?f=423&t=10757).  
  
Měli jsme implementovat interpret jednoduchého dynamicky typovaného jazyka.  
Každá proměnná mohla obsahovat string, integer nebo null a měla jít sčítat s jinou a printnout (pravidla níže).   
Jazyk měl následující příkazy:

* seti var_name var_value  -> do proměnné var_name ulož integer hodnotu var_value (pokud var_value nelze převést na int, ulož 0)
* sets var_name var_value -> do proměnné var_name ulož string hodnotu var_value
* add store_result_var_name left_op_var_name right_op_var_name -> do store_result_var_name ulož výsledek  left_op_var_name + right_op_var_name
* echo var_name -> print proměnné var_name na konzoli

Hodnota typu null vzniká pouze pokud se přistupuje k zatím neinicializované proměnné.  
  
Pravidla sčítání:
* null + cokoliv, cokoliv + null -> null
* integer + integer -> klasické sčítání
* string + string, string + integer, integer + string -> konkatenace

Printování:
* integer -> klasicky, např. 42
* string -> klasicky, např. "lorem" (pozor, uvozovky nutné)
* null -> null

Každopádně to byla úloha zaměřená na polymorfismus, virtuální metody atd.   
Autorské řešení využívalo [https://en.wikipedia.org/wiki/Double_dispatch](https://en.wikipedia.org/wiki/Double_dispatch).  
Přikládám své řešení, které mi zabralo asi 2 hodiny ze 4, které byly k dispozici (odcházel jsem 3.), taky využívalo double dispatch a bylo za plný počet.   
[https://gist.github.com/MichalPospech/4 ... c13b12a77d](https://gist.github.com/MichalPospech/4f233c70e7595449b2d957c13b12a77d)
<{/ForumPost}>

