Omvendt ordstilling i Kodedalen

Uten videre foranledning faller jeg i dyp transe når denne kodesnutten på min skjerm dukker opp:

if ( null == adIds )

En vag tåke legger seg lett over cerebrum, og jeg hører distinkt lyden av en hånd som klapper, akkompagnert av ensomme trær som faller til jorden i skogen. Kanskje er det Yoda som hvisker meg i øret, når han ønsker å fortelle om skuffen som er innholdsløs: -”Tom, er skuffen.”

Hva har skjedd her?

Gått seg bort, har han?

Et søk i nåværende kodebase på “if ( null ==” gir 63 treff.

Gått seg bort, har de?

La oss hente geværet og skyte ut følgene bullet points:

  • antageligvis ønsker avsender å avverge feilaktig tilordning ved = istedenfor ==
  • eller han har overgeneralisert idiomet [if ("myString".equals(myString) ] istedenfor [ if ( myString.equals("myString") ] (fordi den siste kræsjer stygt hvis myString er null)
  • men å overgeneralisere på en måte som i det forrige punktet er altså meningsløst
  • og det første burde IDEet ditt advare deg imot
  • og dessuten er omvendt ordstilling stygt
  • og koden blir litt vanskeligere å lese
  • og hva svarte er poenget med det?
  • (og du blir aldri like kul og vis som Yoda, so quit trying)

Og så henger vi geværet pent på kroken sin, og bare nyter den gode virkningen en real meditasjonsøkt har på kroppen vår.

This entry was posted in løsningsdesign. Bookmark the permalink.
  • Runar Jordahl
    I Smalltalk gjør man det slik:

    adIds ifNil: [gjør dette her]

    Ingen vil finne på å bruke denne syntaxen (som også er lovlig):

    nil = adIds ifTrue: [gjør dette her]
  • My question would be why people find this harder to read? null == x or x == null are semantically identical. Have people been formatted to read only in one direction ? Aren't we suppose to adapt ?

    People using this technique will write less bugs and won't depend on tools. It's mostly language independent. It's not that a bad programming practice.
  • Well it probably has to do with how we naturally speak (at least in English and Norwegian). The subject comes first, so we know what we're talking about when we describe it. It is easier to process "the drawer is empty" than "empty, is the drawer" exactly because we can see before our inner eye the drawer, and then just add to that the information that it is empty. It is harder to visualize "empty", and then attach to that, that it is the drawer, you're talking about.
  • The fact that we rely on approximate translation of code into natural language is the reason why people started using this programming idiom: people made mistake and misread x = null into an equality check.

    The thing is code isn't natural language, and using idioms that look like they can be read but be mistyped is dangerous.

    We can always introduce methods isNull(x) to get a good readability. Actually I would enforce using something like that if there was no performance cost associated.

    We've managed to learn some complex programming grammars, we should be able to read that one easily. If we had been taught from the beginning that null == is the way to write, we should probably have no issue reading that.

    Note: I don't necessarily disagree with you. I understand where you come from and why you complain. I just wonder why we have a harder time with this rather simple syntax.
  • Arne
    For utagerende meditasjon, takk!

    Her er et mulig løsningsforslag.

    if ( ( adIds == null ) == true )

    Bedre?
  • Jeg fikk en kommentar inn fra sidelinjen om at jeg var negativ.

    Negativ, var det ikke meningen å være.

    Poenget med historien er å skape bevissthet rundt hvordan man koder, hvorfor man gjør som man gjør.

    Krydret lett med sterke personlige meninger (uoppfordrede, velbegrunnede) øker fluepapiret sin tildragningskraft.

    Ja?

    Nei?

    Jeg ser masse flott kode hver dag. Bare så det er sagt.
  • Rune
    Jeg hater også slik "ordstilling" det er bare forvirrende. Om du skriver kode som tilfeldigvis tilordner i stedet for å sjekke burde vel en test oppdage det ?
  • Ja det er et godt poeng. Ikke bare advarer IDEet ditt deg mot en ument tildeling, men en test vil kjapt fange det opp.
blog comments powered by Disqus