[racket] Is this a good design
On 2/29/12 3:17 PM, Roelof Wobben wrote:
> Oke,
> Wierd idea that input control is not neccesarly. I have tried C and C++
> and they empasise to do input control.
[But you were taking an inconsistent approach: you checked in the input
was a string, but then assumed it was non-empty. If you're going to
check, then check. But the bigger issue is...]
We're talking about program design, which is independent of programming
language. The HtDP-based design is to state assumptions and obligations
in the form of a contract (an agreement between a program and its users)
then live up to that statement.
You can imagine alternative statements of the program contract and
purpose that would lead to different code. One is to drop the non-empty
assumption and state the error case:
;; String -> String
;; Get first character of string if there is one, error otherwise
Then you'd want to specify the error behavior in examples (and write
tests that tested this behavior) and make sure your code changed to
reflect the revised class of data it consumes.
Yet another is:
;; Any -> String
;; Get first character if given a non-empty string, error otherwise
Again, the code changes (because the input data changed) and your tests
should include examples drawn from the revised class of input.
Try both out.
David