[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