V F# nie je zvykom písať Printf.printf
, to je asi OCaml zlozvyk. :) Module Printf je priamo dostupný v programoch. Modul obsahuje širokú škálu print funkcií. V posledných dvoch verziách F# boli pridané bohaté možnosti interpolácie reťazcov. (To bolo dovtedy zvláštne opomenutie.) Medzi najčastejšie používanými je zrejme funkcia printfn
.
let msg = "an old falcon" printf "%s\n" msg printfn "%s" msg let n = 32 eprintfn $"error message {n}" let name = "Jone Doe" let age = 34 printfn $"{name} is {age} years old" let res = sprintf "Write five = %d and six = %d" (3+2) (3+3) printfn "%s" res let name2 = "Roger Roe" let age2 = 30 printfn $"""Name: %s{name2}, Age: %d{age2}"""
Dlho mi nešlo do hlavy, prečo nie je dostupná funkcia, ktorá bez všetkého vypíše premennú, podobne ako print v Pythone. Autori zrejme predpokladajú použitie .NET metódy Console.WriteLine
.
Poznámka k špecifikátoru %A
.
let data = [0..4] let output = $"The data is %A{data}"
Ten sa využíva na diagnostické vypísanie ľubovoľnej hodnoty, hlavne tých komplexnejších.
Pre pochopenie Unit typu. Toto je hodnota, nie funkcia:
let hello = printfn "Hello there"
Toto je funkcia:
let hello () = printfn "Hello there"
Funkcie musia z definície niečo vracať.
Poznámka k recordom. Pokiaľ je každý field na samostatnom riadku, tak je bodkočiarka voliteľná. Ionide automaticky takto formátuje.
Na rozdiel od jazykov, ktoré sa умудрили pridať recordy len v poslednej dobe, F# ich má od začiatku s využitým jednoduchej, priamočiarej syntaxe. Recordy považujem za základnú nevyhnutnosť pre programovacie jazyky, ktoré chcú ašpirovať na dátovú analýzu.
14. 9. 2023, 10:14 editováno autorem komentáře