[ x ]

Faig servir les cookies de Google Analytics per al control de visites i estadístiques..
És una pardalada, però la llei diu que us he d'avisar, ja veus. Així que si visitau aquest blog donau-vos per informats o sortiu ara mateix i netejau les cookies del vostre navegador. Si continuau llegint, suposaré que ja us està bé. Si vols saber com llevar les cookies del teu navegador: aquí ho pots trobar

El teu llenguatge de programació pot fer això?

Aquesta és la pregunta que fa Joel Spolsky al seu blog. Aquesta pregunta li serveix a Joel per introduïr-nos en la programació funcional.

A més de provocar-nos Joel ens anima a aprendre més coses de la programació funcional, d'aquesta capa d'abstracció addicional que ens permet fer les coses d'una altra manera. En Joel diu que si no fos per aquest tipus d'abstracció Google no seria el que és i aprofita per tonar-se a queixar de les escoles de pensament únic, on sols s'ensenya un llenguatge de programació.

Amb això, com en tantes altres coses, no put estar més d'acord amb Joel. Un sol llenguatge no basta, ens limita a pensar sols en el llenguatge que sabem i no ens permet pensar en termes del problema que volem resoldre. El curs de Ruby al que anàrem fa uns dies anava un poc en aquesta línea: veure com altres llenguatges resolen problemes comuns, veure altres maneres de fer coses ...

En aquests moments el meus dos llenguatges de programació principals són Java i Python. Java ho faig servir per guanyar-me les sopes, Python per divertir-me, per la mateixa raó que escric aquest blog. Així que la contestació a la pregunta de Joel, és sí, Python pot fer això! Si el que diu de Google és cert, i no tenc cap motiu per dubtar-ho, no m'extranya gens que aquesta gent hagi contractat al creador de Python, Guido Van Rossum, ja que des dels començaments la programació funcional ha estat una part important del llenguatge.

#!/usr/bin/python

def alert (s):
        print s

print "pas 1"

alert ("I'd like some Spaggetti!")
alert ("I'd like some Chocolate Moose!")

def SwedishCheff(food):
        alert ("I'd like some %s !" % food)

print "pas 2"

SwedishCheff("Spaghetti")
SwedishCheff("Chocolate Moose")

print "pas 3"

def PutInPot(s):
        alert ("pot "+s)

def BoomBoom(s):
        alert ("boom "+s)

def Cook (i1, i2, f):
        alert ("get the "+ i1)
        f(i1)
        f(i2)

Cook ("lobster", "water", PutInPot)
Cook ("chicken", "coconut", BoomBoom)

print "pas 4"
#Aquí del que es tracat de de definr la funció en línea. 
#Tiram de lambda per això. lamda ens permet definir funcions anònimes
#sempre que el cos sigui una sola expressió.
#El codi javascrip de Joel:

#    Cook( "lobster", 
#          "water", 
#          function(x) { alert("pot " + x); }  );
#    Cook( "chicken", 
#          "coconut", 
#          function(x) { alert("boom " + x); } );

Cook ("lobster", "water", lambda x: alert("pot "+x))
Cook ("chicken", "coconut", lambda x: alert("boom "+x))

print "pas 5 n-----"
# Aquí Joel defineix la funició map. És una construcció
# pròpia de Python. Així que no necessitam ni fer-la
# la sintaxi és map(funcio, llista)

a = [1,2,3]

a= map (lambda x: x*2, a)
map (alert, a)

# Finalment el reduce tampoc no fa falta definir-la ja
# que també és part del llenguatge. 
# de fet podriem fer

suma = lambda x : reduce (lambda i,j : i+j, x)
alert ( suma(a))

b=['a1','b2','c3']
alert( suma(b))

Els comentaris estan tancats.

Els pingbacks estan tancats.