Re[6]: [ANN] Scala 2.4.0 -- релиз
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.03.07 08:40
Оценка: 1 (1)
Здравствуйте, Gajdalager, Вы писали:

E>> Туда бы еще обобщенное программирование как в D, вообще был бы шедевр.

G>Хмм.. Ты имеешь в виду генерики (generics)? Так в скале они тоже очень неплохи, во всяком случае поудобней чем в жабе, а система вывода типов делает их использование ещё удобней.. Можно пример кода на Д? Спасибо..

Да, речь о генериках. Охотно верю тому, что в Scala генерики удобнее, чем в Java. Так же я не сомневаюсь, что все заморочки с декларацией поддерживаемых параметром шаблона интерфейсов -- следствие компонентно-ориентированного подхода, где реальное связывание кода может происходить в run-time.

Однако, если переход на Scala выполняется, как в моем случае, с C++, где обобщенное программирование совсем другое, то генерики не выглядят удобными.

Вот пример кода на Scala:
object Demo1 extends Application
{
  class ValueHolder
  {
    def value = { 0 }
  }

  def doSomething[ B <: ValueHolder ]( holder: B ) {
    holder.value
  }

  doSomething( new ValueHolder )
}

// vim:ts=2:sts=2:sw=2:expandtab


В методе Demo1.doSomething указывается, что параметром может быть либо сам ValueHolder, либо его наследник. Т.е. невозможно использовать doSomething для какого-либо другого типа, не связанного с ValueHolder отношениями наследования.

А вот аналогичный пример на D:
class ValueHolder
{
    int value() { return 0; }
}

class AnotherValueHolder
{
    float value() { return 0.0; }
}

void
doSomething(T)( T holder )
{
    holder.value;
}

void
main()
{
    doSomething( new ValueHolder );
    doSomething( new AnotherValueHolder );
}

Функция doSomething может применяться к любому типу. Более того, методы ValueHolder.value и AnotherValueHolder.value не совпадают по типу возвращаемого значения.

Именно такая свобода в повторном использовании обобщенных функций в D (как и в C++) нравится мне больше, чем подход с генериками в языках Scala/Java/C#.

При этом можно заметить, насколько больше в D "синтаксического оверхеда" по сравнению с Scala (необходимость писать return, постоянные точки с запятыми) -- программы на Scala синтаксически выглядят привлекательнее


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.