[nem-pl] z cyklu oglądamy i krytykujemy

Michal Moskal malekith at pld-linux.org
Thu Nov 6 20:10:30 CET 2003


On Thu, Nov 06, 2003 at 05:25:44PM +0100, olszta at tey.pl wrote:
> 3) straznik dla bloku wykonywalnego:
> 
> guard { [warunek]; [warunek]; ... }
> 
> To sa niezmienniki na poziomie calego bloku, podobnie jak require,
> ale sprawdzane po kazdej instrukcji w bloku, a nie tylko na jego
> koncu (tu oczywiscie mozliwe sa pewne optymalizacje, ale to nie
> jest istotne w tej chwili).
> 
> Tutaj jest taki problem, ze to jest bardzo fajne, jesli mamy
> zdefiniowane petle w jezyku (np. while). Inaczej przydaje sie to
> tylko w bardzo prostych programach.

Ależ mylisz się Pawle:

{
  guard { n > 0 }
  def loop () : void {
    if (n < 10)
      { n <- n + 1; loop () }
    else
      n
  }
  loop ()
}

Brak while w niczym nie przeszkadza.

> -- PRZYKLAD --------------------

On się chyba nie bardzo nadaje do prezentacji, w szczególności:
  - nie robi nic sensownego, choć udaje :-)
  - transaction nie ma w nim sensu

Nie jestem jeszcze pewny co do require i ensure. Może lepiej dla obu po
prostu assert i dodatkowo pozwolić w ostatnim assert w bloku na używanie
value?

-- 
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h




More information about the devel-pl mailing list