Какие другие языки программирования имеют синтаксис передачи сообщений, похожий на Smalltalk? - PullRequest
23 голосов
/ 27 мая 2011

Какие языки с синтаксисом передачи сообщений похожи на Smalltalk?Objective-C - единственный, с кем я знаком.В частности, мне было интересно, существуют ли какие-либо другие языковые реализации, которые допускают синтаксис в такой форме: [anObject methodWithParam:aParam andParam:anotherParam], с сообщениями, которые допускают именованные параметры, как часть определений метода.может способствовать более последовательным именам методов, которые более четко показывают намерения методов, и что цена, которую вы платите в словах, как правило, того стоит.Я хотел бы знать, есть ли другие языки, которые поддерживают это.

Ответы [ 7 ]

14 голосов
/ 27 мая 2011

Вот список языков, поддерживающих синтаксис сообщений с ключевыми словами, аналогичных Smalltalk:

  • Objective-J , Objective-Modula-2 .Это языковые расширения, аналогичные Objective-C.
  • Strongtalk , диалект Smalltalk с необязательной строгой типизацией
  • F-script , встраиваемыйДиалект Smalltalk с расширениями операций с массивами в стиле APL.
  • Self
  • Newspeak
  • Slate
  • Atomo , встраиваемый язык для Haskell
5 голосов
/ 03 июня 2011

В дополнение к другим языкам, упомянутым здесь, 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 голосов
/ 27 мая 2011

См., Например, Self .

Также многие языки поддерживают необязательные именованные параметры, например, Python или C # (начиная с v4).

2 голосов
/ 27 мая 2011

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))

Это, конечно, не передача сообщений, а просто вызов старой функции.


* Они могут использоваться не для этого, например для задания значений по умолчанию.

0 голосов
/ 29 мая 2011

Erlang не претендует на то, чтобы быть объектно-ориентированным, но передача сообщений является ключевым понятием в этом языке.

0 голосов
/ 27 мая 2011

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);
0 голосов
/ 27 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...