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