On Wed, Sep 26, 2018 at 6:37 PM Chris Angelico firstname.lastname@example.org wrote:
On Wed, Sep 26, 2018 at 5:51 PM Marko Ristin-Kaufmann email@example.com wrote:
It's easy to say that they're boolean expressions. But that's like saying that unit tests are just a bunch of boolean expressions too. Why do we have lots of different forms of test, rather than just a big fat "assert this and this and this and this and this and this"? Because the key to unit testing is not "boolean expressions", it's a language that can usefully describe what it is we're testing. Contracts aren't just boolean expressions - they're a language (or a mini-language) that lets you define WHAT the contract entails.
Sorry, I misunderstood you. You are probably referring to knowing the terms like "preconditions, postconditions, invariants, strengthening/weakening", right? In that case, yes, I agree, I presuppose that readers are familiar with the concepts of DbC. Otherwise, of course, it makes no sense to use DbC if you assume nobody could actually figure out what it is :).
Let's say you want to define a precondition and postcondition for this function:
def fibber(n): return n < 2 ? n : fibber(n-1) + fibber(n-2)
def fibber(n): return n if n < 2 else fibber(n-1) + fibber(n-2)
Let's, uhh, pretend that I didn't just mix languages there.
For the original, we can say: