ultima tutorial programacion objective logo lenguaje caracteristicas objective-c syntax language-design smalltalk message-passing

objective c - tutorial - ¿Qué otros lenguajes de programación tienen una sintaxis de paso de mensajes similar a Smalltalk?



objective c vs swift (7)

¿Qué idiomas hay con una sintaxis de paso de mensajes similar a la de Smalltalk? Objective-C es el único con el que estoy familiarizado. Específicamente, me preguntaba si existen otras implementaciones de lenguaje que permitan la sintaxis en una forma como: [anObject methodWithParam:aParam andParam:anotherParam] , con mensajes que permiten parámetros con nombre como parte de las definiciones de método.

En general, considero que esta sintaxis puede conducir a nombres de métodos más consistentes que muestren más claramente la intención de los métodos, y que el precio que pagas en wordiness generalmente vale la pena. Me encantaría saber si hay otros idiomas que apoyen esto.


Ada soporta parámetros nombrados.

function Minimum (A, B : Integer) return Integer is begin if A <= B then return A; else return B; end if; end Minimum;

Luego llame:

Answer := Minimum (A=>100, B=>124);


Además de los otros idiomas mencionados aquí, Fancy :

osna = City new: "Osnabrück" p = Person new: "Christopher" age: 23 city: osna p println berlin = City new: "Berlin" p go_to: berlin p println


Aquí hay una lista de idiomas que admiten la sintaxis de los mensajes de palabras clave similares a Smalltalk:


Python y Common Lisp (probablemente entre otros) permiten argumentos de palabras clave. Puede realizar llamadas a funciones que incluyan los nombres de los parámetros.

Estos no son equivalentes a los nombres de los métodos de Obj-C, porque la palabra clave args ignora la posición, pero responden a su pregunta sobre la legibilidad. *

make_an_omelet(num_eggs=2, cheese=u"Gruyère", mushrooms=True)

(make-a-salad :greens ''boston-lettuce :dressing ''red-wine-vinaigrette :other-ingredients ''(hazelnuts dried-apricots))

Esto no es, por supuesto, el paso de mensajes, simplemente la simple función de llamada.

* Tienen otros usos además de esto, como especificar valores predeterminados.


Ruby puede enviar mensajes a objetos para llamar a sus métodos, de la misma manera que objc hace:

class Foo def bar a,b a + b end end f = Foo.new f.send(:bar, a=4, b=5) >> 9

De hecho, entre otras cosas, esto hace posible la integración entre Cocoa y Ruby en MacRuby.


Véase, por ejemplo, Self .

Además, muchos idiomas admiten parámetros con nombre opcionales, por ejemplo, Python o C # (comenzando con v4).


Erlang no pretende estar orientado a objetos, pero el paso de mensajes es un concepto clave en ese idioma.