MI-PSL-5 Flashcards
- What does it mean “higher-order function”?
Funkce, které přijímají funkce jako parametry nebo funkce vrací.
- Write the type of the function: def cmp(a : Int, b : Int) = a > b
(Int, Int) => Boolean
- For what the function type: (Int, Int) => Boolean is shorthand?
Function2[Int, Int, Boolean]
- What does it mean f(e) when f is a value?
volání metody f.apply(e)
- What is the form of the procedure definition?
Procedury nemají návratový typ, vrací typ Unit,což je obdoba void v Javě. V definici chybí návratový typ a znak rovnítka. Tělo metody musí být blok (uzavřený v {} závorkách).
def write(str: String) { println(str) }
- What is it anonymous function? Write an example.
Je to výraz, který je vyhodnocen jako funkční hodnota. Často jsou využívány jako parametry high-order funkcí, příklad:
List(1,2,3).map(x=>2*x) //List(2, 4, 6)
- When and by what may be substituted formal parameters in the body of an anonymous function?
Můžou být vynechány typy parametrů,
pokud je pouze jeden parametr nemusí být uzavřen v závorkách
jména parametrů mohou být nahrazeny placeholderem _ (pokud je formalni parametr funkce pouzit pouze jednou) a definice odstraneny
- How can be function converted to function value?
Pokud je za funkcí znak _, je funkce navrácena jako hodnota
Pokud je očekáván typ funkce, nemusí být _ uvedeno
Pokud se vynechají některé parametry funkce
- To what is equivalent anonymous function: (x : Int) => -x
new Function1 [Int, Int] { def apply(x : Int): Int = -x }
- What is it curried function?
Funkce, která vrací funkci a má následující syntax:
def sum(x : Int)(y : Int)(z : Int) = x + y + z Tato funkce se pak volá:
sum(1)(2)(3)
Nemusíme ale předat všechny parametry najednou, lze předat nejdříve první parametr, výslednou funkci (vracející opět funkci) si uložit, poté předat druhý parametr, výslednou funkci si opět uložit.
- What is it closure?
Názvem closure se nazývá funkce společně s jejím kontextem, který poskytuje přístup k vnitřním proměnným funkce. Jelikož funkce může být převedena do funkční hodnoty, její kontext může mít kratší život než funkce samotná.
- What is it default argument?
Defaultní hodnota argumentu, pokud hodnota není uvedena. Přetížená metoda dědí všechny defualtní argumenty a může je předefinovat.
- What is it named argument?
Příklad:
def volume(a : Int, b : Int, c : Int) = a * b * c volume(c = 5, 3, a = 2) Pojmenované argumenty mohou být na jakékoliv pozici a mohou být libovolně kombinovány s obyčejnými parametry.
- What is it call-by-name parameters?
Parametry, které nejsou vyhodnoceny při předávání, ale až při použití v těle funkce (při každém použití znovu). Označují se => ParamType, např.:
def whileLoop (cond: => Boolean)(stat: => Unit) Tyto paramety nemůžou být val a var parametry tříd a implicitní parametry.
- What is it repeated parameter?
Opakovaný parametr umožňuje mít volitelné množství argumentů ve funkci, označuje se hvězdičkou za parametrem, který se může opakovat. Tento parametr musí být poslední a nesmí se vyskytovat spolu s parametry, které mají implicitní hodnotu. V těle funkce jsou pak argumenty dostupné v sekvenci, tedy typu Seq. Pokud chceme funkci zavolat se sekvencí, která má sloužit jako tyto volitelné argumenty, je třeba za sekvenci napsat rozvinutí : _*
Příklady:
def sum(args: Int*) = { var result = 0 for (arg