[Squeak-ev] [Newbie] loop-Konstrukt

Bert Freudenberg bert at impara.de
Mit Nov 16 00:06:44 UTC 2005


Am 15.11.2005 um 23:49 schrieb Enrico Schwass:

> Vermutlich ist oben mein Pseudo-Code falsch verstaendlich. In Ruby  
> sehe
> das so aus
>
> counter = 0
> loop do
> 	counter = counter.succ
> 	char = STDIN.getc
> 	break if char == 10
> 	break if counter > 255
> #	....
> end
>
> loop ist in Ruby eine Endlosschleife.


Wie du schon vermutetest, würde man das üblicherweise mit #while...  
erledigen:

counter := 0.
[
	counter := counter + 1.
	char := stream next.
	char isNil or: [char asInteger = 10 or: [counter > 255]]
] whileFalse.

Es gibt auch #repeat als Endlosschleife, sieht man aber eher selten,  
und wird dann üblicherweise mit nicht-lokalen Returns kombiniert:

counter := 0.
[
	counter := counter + 1.
	char := stream next.
	char ifNil: [^self].
	char asInteger = 10 ifTrue: [^self].
	counter > 255 ifTrue: [^self].
] repeat.

Da dann nach der Schleife natürlich nichts mehr folgen kann, macht  
man daraus eine eigene Methode. Was anerkanntermaßen sowieso meist  
eine gute Idee ist ;-)

- Bert -