Какие другие языки программирования имеют синтаксис передачи Smalltalk- like message-?
Какие языки существуют с синтаксисом передачи message-, похожим на Smalltalk? Objective-C - единственный, с которым я знаком. В частности, мне было интересно, существуют ли какие-либо другие реализации языка, которые допускают синтаксис в форме, подобной: [anObject methodWithParam:aParam andParam:anotherParam]
, содержащей сообщения, которые разрешают именованные параметры как часть определений методов.
В целом я нахожу, что этот синтаксис может способствовать более согласованным именам методов, которые более четко показывают намерения методов и что цена, которую вы платите в многословии, в целом стоит того. Я хотел бы знать, есть ли другие языки, которые поддерживают это.
Ответы
Ответ 1
Вот список языков, поддерживающих синтаксис ключевых слов, аналогичных Smalltalk:
Ответ 2
В дополнение к другим упомянутым здесь языкам 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
Ответ 3
См. Self.
Кроме того, многие языки поддерживают необязательные именованные параметры, например. Python или С# (начиная с v4).
Ответ 4
Python и Common Lisp (возможно, среди других) позволяют использовать аргументы ключевого слова. Вы можете выполнять вызовы функций, которые включают имена параметров.
Они не эквивалентны именам методов Obj- C, потому что ключевое слово args игнорирует позицию, но они отвечают на ваш вопрос об удобочитаемости. *
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))
Это, конечно, не передача сообщений, а просто старая функция вызова.
* У них есть другое использование, кроме этого, например, задание значений по умолчанию.
Ответ 5
Ada поддерживает именованные параметры.
function Minimum (A, B : Integer) return Integer is
begin
if A <= B then
return A;
else
return B;
end if;
end Minimum;
Затем вызовите:
Answer := Minimum (A=>100, B=>124);
Ответ 6
Ruby может отправлять сообщения объектам для вызова своих методов, в основном как objc:
class Foo
def bar a,b
a + b
end
end
f = Foo.new
f.send(:bar, a=4, b=5)
>> 9
Действительно, между прочим, это делает возможным интеграцию между Cocoa и Ruby в MacRuby
Ответ 7
Erlang не претендуют на объектно-ориентированную структуру, но передача сообщений является ключевой концепцией на этом языке.