; From: Dat Thuc Nguyen
; Newsgroups: comp.protocols.kermit.misc
; Subject: SWITCH statement considered harmful
; Date: Wed, 31 Mar 1999 15:09:20 GMT
; URL: http://www.smalltickle.com
;
; In languages such as Kermit, Tcl, C, etc, the SWITCH statement could be
; the source of subtle bugs caused by the intentional or unintentional
; omission of the break statement.
;
; 'Using C-Kermit' 2nd edition, page 385, displays a classical usage of the
; switch statement with the intentional omission of the break statement to
; achieve a "fall-through".
;
; This programming method is error prone and should be avoided.
;
; Consider the following alternative which is more defensive and maintenance
; friendly, since:
;
; 1. New cases can be added easily.
; 2. No break statement is needed to terminate a case.
; 3. Fall-through is explicit through the specification of the targeted case,
;    which can be any of the possible cases, even backward, skip intermittent
;    cases, whatever.
; 4. Each case label is expressive.
; 5. Default statement is replaced with the check on fail.
; 6. No subtle bugs caused by the implementation of the switch statemnet.
;
; Kermit scripting language is not C. When programming in Kermit, use Kermit
; idioms, don't mimic C.
;
; This is object-oriented programming in the small, the day_ is generic, when
; appended with a case specific value, it yields the name of a predefined
; macro, and get executed. This flexibility is very effective.
;
define WEEKDAY {

	local day_0 day_1 day_2 day_3 day_4 day_5 day_6

	define day_0 { echo Sonntag }
	define day_1 { echo Montag und uebermorgen ist, day_3 }
	define day_2 { echo Dienstag und zunaechst kommt ..., day_3 }
	define day_3 { echo Mittwoch }
	define day_4 { echo Donnerstag }
	define day_5 { echo Freitag und gestern war, day_4}
	define day_6 { echo Samstag und da ist schon wieder der, day_0}

	day_\v(nday)
	if fail echo Invalid day - \v(nday)
}
