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:
- Objective-J , Objective-Modula-2 . Estas son extensiones de lenguaje similares a Objective-C.
- Strongtalk , un dialecto de Smalltalk con escritura fuerte opcional
- F-script , un dialecto de Smalltalk integrable con extensiones de operaciones de matriz inspiradas en APL.
- Self
- Newspeak
- Slate
- Atomo , un lenguaje integrable para Haskell.
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.