07 września 2013

O def(iniowaniu funkcji) w języku programowania Scala ciąg dalszy

W Definiowanie metod w języku Scala - def przedstawiłem znaczenie słowa kluczowego def w języku Scala.

W imię przygotowań do Scalania 3 kontynuuję temat.

Wpisujemy bezpośrednio do Scala REPL definicję funkcji sumowania sum, które akceptuje dwa parametry typu Int.
scala> def sum(x: Int, y: Int) = x + y
sum: (x: Int, y: Int)Int
W odpowiedzi dostajemy nazwę nowej wartości sum i jej typ po dwukropku (x: Int, y: Int)Int, czyli funkcję dwóch parametrów x i y, której wynikiem jest wartość typu Int. Pamiętaj, że sum jest wartością niezmienną i jej wartość zawsze będzie typu (x: Int, y: Int)Int.

Wywołaj funkcję sum z dowolnymi parametrami (jednak wciąż z zakresu typu Int), np. sum(2, 4).
scala> sum(2,4)
res0: Int = 6
Wywołanie funkcji to podanie jej nazwy z określeniem wartości parametrów wejściowych. W wyniku otrzymujesz nazwę wyniku - res0, jej typ po dwukropku - Int - oraz wartość po znaku równości - 6. Proste? Dokładnie! Zero magii (zakładając, że nie przespałaś kilku lekcji matematyki, na których było o funkcjach i sposobach ich wywołania).

Spróbuj wykonać funkcję z parametrem innego typu, np. String - ciągiem znaków między apostrofami.
scala> sum("b", "b")
<console>:9: error: type mismatch;
 found   : String("b")
 required: Int
              sum("b", "b")
                  ^
Otrzymałaś błąd niezgodności typów - <console>:9: error: type mismatch;. Oczywiście należało się tego spodziewać, bo jedynym typem wejściowym funkcji sum jest Int. Int nie jest String.

Zadanie: Napisz definicję funkcji sum(a: String, b: String) i wykonaj ją dla kilku wybranych par ciągów, np. sum("m", "n"). Co miałoby być wynikiem?