I would try and reduce the number of branches first. you can use guard
conditions to exit early.

This is not necessarily exact below, but you hopefully get the idea...

(self currentRow == sortedRows last and: [self currentCell isNil])
        ifTrue: [^self navigationKey: event]

self currentRow ifNil: [^self].

self currentCell ifNil:
        [^self setCurrentRowToNext]

self setCurrentCellToNext.

self currentCell ifNil: [^self].
        
self currentCell performKeyFocus: event inCellBounds:
        (self pvtGetCellBounds: self currentCell)


A different approach entirely is to have an object(s) that represents
the nil state for the row and cell. That way you are not checking
constantly for it being nil, and perhaps you can dispatch some
behaviour to it.

cheers,
Mike

On Mon, Mar 15, 2010 at 9:49 PM, nullPointer <[email protected]> wrote:
>
> Well, perhaps is a theme worked in another times but... is possible for Pharo
> have a basic Case or elseIf statement? I know is easy create you own
> structure control, but not is more useful have a "standard" for everybody?
> I´m tired of write code like that...
>
>                        (self currentRow == sortedRows last and: [ self
> currentCell isNil ]) ifTrue:
>                        [
>                                self navigationKey: event
>                        ]
>                        ifFalse:
>                        [
>                                (self currentRow notNil and: [ self 
> currentCell isNil ]) ifTrue:
>                                [
>                                        self setCurrentRowToNext.
>                                ]
>                                ifFalse:
>                                [
>                                        (self currentRow notNil and: [ self 
> currentCell notNil ]) ifTrue:
>                                        [
>                                                self setCurrentCellToNext.
>
>                                                self currentCell notNil ifTrue:
>                                                [
>                                                        self currentCell 
> performKeyFocus: event inCellBounds: (self
> pvtGetCellBounds: self currentCell).
>                                                ].
>                                        ].
>                                ].
>                        ].
>
>
> Write code with that format is pathetical :(
>
> Is valid too have a "and" and "or" lazy? Exists a not lazy with #& and #|  ,
> but could exists an #&& and #||  . Is more easy...
>
>      value1 == value2 and:[ <condition> ] and: [<condition>] ......
>
> or
>
>     value1 == value2 && <condition> && <condition> ......... ???
>
> Well, perhaps is a stupid question but I miss a more complete way for write
> code. If in Smalltalk is possible do easy that and include it in "core" why
> not do it?
>
> Is a reasonable desire :)
>
> Regards
>
>
>
>
>
>
> --
> View this message in context: 
> http://n4.nabble.com/Case-statement-and-lazy-comparison-in-Pharo-tp1594080p1594080.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to