[linux-l] Apropos Java-Bein-Klotz
Oliver Bandel
oliver at first.in-berlin.de
Fr Mai 27 20:39:45 CEST 2005
Hallo,
bin mal nach vielen, vielen Monaten nun wieder auf dieser Liste! :)
Eigentlicher Beweggrund war die Diskussion um Java/C und die
Aktionsausführung in Abhängigkeit von einem Key.
OK, ich schmeisse mal ein bischen OCaml-Code in die Runde. :)
Habe mal eben zwei Versionen erstellt. Beide anbei.
=====================================================================
=====================================================================
Version 1: Mit Association Lists
==========
let keystrokes = ["a"; "v"; "j"; "b"; "c"; "z"; "x"] (* die Eingabe *)
(* Was es denn zu tun gibt *)
(* ----------------------- *)
let a_func () = print_endline "A-Funktion!"
let b_func () = print_endline "B-Funktion!"
let c_func () = print_endline "C-Funktion!"
let d_func () = print_endline "D-Funktion!"
let e_func () = print_endline "E-Funktion!"
let f_func () = print_endline "F-Funktion!"
let v_func () = print_endline "V-Funktion!"
let x_func () = print_endline "X-Funktion!"
(* Die Zuordnung von keys und Funktionen *)
(* Association-List (List of pairs) *)
(* ------------------------------------- *)
let key_to_function =
[
("a", a_func);
("b", b_func);
("c", c_func);
("v", v_func);
("x", function ()-> print_endline "hahah");
]
(* Auswahlfunktion inklusive Fehlermeldung *)
(* --------------------------------------- *)
let do_selection key =
try
List.assoc key key_to_function ()
with
Not_found -> prerr_endline "!"
(* Main *)
(* ---- *)
let _ =
List.iter do_selection keystrokes (* na dann mach mal Deine Arbeit *)
(* Wie man sieht, kommt man ganz ohne Pointer aus.
Deswegen gibt es in OCaml auch keine. :) *)
=====================================================================
=====================================================================
Version 2: Mit Pattern Matches
==========
(* --------------------------------- *)
(* Das ganze mal mit Pattern Matches *)
(* --------------------------------- *)
let keystrokes = ["a"; "v"; "j"; "b"; "c"; "z"; "x"] (* die Eingabe *)
(* Was es denn zu tun gibt *)
(* ----------------------- *)
let a_func () = print_endline "A-Funktion!"
let b_func () = print_endline "B-Funktion!"
let c_func () = print_endline "C-Funktion!"
let d_func () = print_endline "D-Funktion!"
let e_func () = print_endline "E-Funktion!"
let f_func () = print_endline "F-Funktion!"
let v_func () = print_endline "V-Funktion!"
let x_func () = print_endline "X-Funktion!"
(* Auswahlfunktion inklusive Fehlermeldung *)
(* --------------------------------------- *)
(* wie man sieht, braucht man auch kein if/elsif/else :) *)
let do_selection key =
match key with
| "a" -> a_func ()
| "b" -> b_func ()
| "c" -> c_func ()
| "v" -> v_func ()
| "x" -> print_endline "hahah"
| _ -> prerr_endline "!"
(* Main *)
(* ---- *)
let _ =
List.iter do_selection keystrokes (* na dann mach mal Deine Arbeit *)
(* Wie man sieht, kommt man ganz ohne Pointer aus.
Deswegen gibt es in OCaml auch keine. :) *)
=====================================================================
=====================================================================
Also mir gefällt das in Ocaml am besten. :)
Ciao,
Oliver
P.S.: Die C-Lösung war aber auch ganz nett, und wegen des sauberen
(und sogar recht FPL-mäßigen) Stils auch endlich mal C-Code,
den man erträglich lesen kann.
Da habe ich in vielen Firmen schon Sachen gesehen, die sich da
was hätten abschauen können.
Was das java-zeugs anging, fand ich das mit dem ganzen Klassen-Geraffel
bloated code.
--
"This sentence consists of thirty-nine letters."
(Heinz von Foerster)
Mehr Informationen über die Mailingliste linux-l