Бывают полезными следующие методы для обхода первого/среднего/последнего элементов коллекций. Удобно, если нужно выполнить различные действия на первом/последнем элементе.
SequenceableCollection>>doFirst: aFirstBlock doMiddle: aMiddleBlock doLast: aLastBlock self keysAndValuesDo: [:i :e | i = 1 ifTrue: [aFirstBlock value: e] ifFalse: [i = self size ifTrue: [aLastBlock value: e] ifFalse: [aMiddleBlock value: e]]]
SequenceableCollection>>doFirst: aFirstBlock doRest: aRestBlock self doFirst: [ :e | aFirstBlock value: e ] doMiddle: [ :e | aRestBlock value: e ] doLast: [ :e | aRestBlock value: e ]
Простейший случай использования:
| sum | seld doFirst: [ :e | sum := e ] doRest: [ :e | sum := sum + e].