[nem-pl] Kilkla temacików

Michal Moskal malekith at pld-linux.org
Sun Jan 4 19:38:03 CET 2004


On Sun, Jan 04, 2004 at 06:51:50PM +0100, Kamil Skalski wrote:
> > Osobny przebieg *parsowania*. Zauważ, że musiałbyś mieć hack w rodzaju
> > liczenia otwartych/zamkniętych nawiasów zamiast normalnego parsowania
> > (bo nie wiesz, że masz np. takie while jakoś inaczej parsować).
> 
> W zasadzie to makra będą tylko w toplevel, więc przy odpowiednim 
> uporządkowaniu parsowania (najpierw wszystkie deklaracje, potem wyrażenie) 

Jak można parsować najpierw deklaracje a potem wyrażenia? Zapmiętywać
sobie tokeny na liście? A skąd wiadomo kiedy się wyrażenie kończy?

> > Można też zastanowić się nad oróżnieniem foo (bar) od foo (bar, "")
> > (tj.  nie podania default argumentu, od padania go akurat w formie
> > defaultowej). Można by to kodować jako option. Ale to nie ma chyba
> > głębszego sensu.
> 
> Hehe, darujmy sobie takie komplikacje:
> 1. params może być tylko jako OSTATNI parametr (w C#) i my też tak to zrobimy, 
> bo zresztą inaczej jest niejednoznacznie

Oczywiście.

> 2. opcjonalne parametry też zrobimy po ludzku, czyli tylko ostatnie

Tu też nie widze przeciwskazań, co do deklaracji. Bo co do wywołania to
tak:

public foo (a : int, b : int,
            do_foo = false : bool, 
	    do_bar = false : bool,
	    do_baz = false : bool) { ... }
	    // może lepiej do_foo : bool = false ?

Wywołanie:

foo (1, 2, do_bar = true);
foo (1, 2, do_bar = true, do_foo = false);

Dopiero z nazwanymi argumentami można fajne rzeczy z default parameters
robić ;)

> 3. podobno C#powcy przyznają, że opcjonalne parametry to tylko cukier 
> syntaktyczne na overloading i że można je sobie zrobić właśnie pisząc kilka 
> wersji danej funkcji. Wydaje się, że nie ma nawet sensu "tworzyć" tych 
> liniowo wielu nowych funkcji, tylko zakodować ten mechanizm w overloading 
> enginie.

Pewnie tak.

Myślałem jeszcze nad problemem, że są klasy, które nie mają żadnej
sensownej defaulotwej wartości lub konstruje się je w sposób wykraczający
poza to co można zapisać w atrybutach. Ale od tego mamy null.

> > Oczywiście opcjonalne argumenty w makrach to tylko kwestia składni i
> > jakiegoś preprocessingu.
> 
> Ale fajnie byłoby mieć to wszędzie - to często ułatwia dostosowywanie API do 
> zmian, bez konieczności przerabiania całego kodu.

Uhm.

-- 
: 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