For å få litt mer aktivitet i programmeringsforumet, som for tiden er relativt dødt, tenkte jeg det kunne være en ide og prøve å starte opp litt gøye tråder. Jeg har allerede en compo kjørende - og vil nå bidra en med liten tråd som kanskje kan være av litt mer almenne interesse.
Jeg ønsker her at vi skal dele små tips og triks - og kanskje enkelte idiomer i forskjellige språk. For at dette ikke bare skal bli enda en ubrukelig listetråd er det derfor ekstra kult om det du deler er noe du kanskje tror mange ikke vet om. Prøv å hold inleggene veldig korte og konsise, men et par setninger forklarer et konsept er greit å få med. Korte kodeeksempler er også veldig godt motatt.
Easier to ask for forgiveness than permission
I mange språk er det vanlig å teste om noe funker før man prøver å gjøre det. F.eks. validere om inputen til en funksjon er gyldig før man kaller den. I python gjør man det motsatt: men anntar et ting går greit, og om det ikke gjør det så håndterer man det etterpå. Dette henger også veldig sammen med begrepet duck-typing.
Eksempel: La oss si du har en funksjon som et et objekt som argument. Denne funksjonen er ment til å ta i bruk objekter av typen Duck, og vil kalle quack() på dette objektet. Men også objekter som har arvet fra Duck godtar du. En måte å gjøre dette på er da:
Men siden man i python ønsker duck-typing burde ikke krav om arv eksisterer, men heller at at den har ønsket funksjonalitet. Så å sjekke arv, blir lite pythonisk. En bedre måte kan derfor være å sjekke eksistensen av quack-metoden som vi forventer:
Men dette kunne vært gjort finere med å bare bruke exceptions, som jeg selv mener lager koden mer lesbar
Jeg ønsker her at vi skal dele små tips og triks - og kanskje enkelte idiomer i forskjellige språk. For at dette ikke bare skal bli enda en ubrukelig listetråd er det derfor ekstra kult om det du deler er noe du kanskje tror mange ikke vet om. Prøv å hold inleggene veldig korte og konsise, men et par setninger forklarer et konsept er greit å få med. Korte kodeeksempler er også veldig godt motatt.
Easier to ask for forgiveness than permission
I mange språk er det vanlig å teste om noe funker før man prøver å gjøre det. F.eks. validere om inputen til en funksjon er gyldig før man kaller den. I python gjør man det motsatt: men anntar et ting går greit, og om det ikke gjør det så håndterer man det etterpå. Dette henger også veldig sammen med begrepet duck-typing.
Eksempel: La oss si du har en funksjon som et et objekt som argument. Denne funksjonen er ment til å ta i bruk objekter av typen Duck, og vil kalle quack() på dette objektet. Men også objekter som har arvet fra Duck godtar du. En måte å gjøre dette på er da:
Kode
class Duck: def quack(self): print "Quack quack!" def my_function(duckobj): if isinstance(duckobj, Duck): duckobj.quack() else: # Handle error
Kode
def my_function(duckobj): if hasattr(duckobj, "quack"): duckobj.quack() else: # Handle error
Kode
def my_function(duckobj): try: duckobj.quack() except (AttributeError, TypeError): # handle error, he can't quack!
Sist endret av etse; 23. juni 2014 kl. 18:22.