Re[7]: Про perl 6
От: Somescout  
Дата: 17.10.15 16:47
Оценка:
Здравствуйте, Takadam, Вы писали:

S>>Это понятно, просто чем-то интересным это не выглядит.

T>а что выглядит, проверять в теле функции, какие ключи были переданы?

Да я не спорю что полезно, просто... в статических языках такое и так есть, в динамических — см. ниже, тоже успели реализовать.

S>>>>И да, такое есть в typescript, только там ещё можно типы указать:

T>>>и в C#, и джаве и c++ и в еще куче статич. языков тоже есть. только мы говорим про руби и питон потому что perl 6 ближе к ним.
S>>Typescript динамический язык.

T>тогда почему при объявление переменных указывается их тип?


Это надмножество javascript с опциональной типизацией, для любого типа можно указать "any" и использовать как в обычном js.

Что мне особо нравится, вывод типа идёт по содержимому, а не по наследованию:
class User {
  public constructor(
    public Name:string,
    public Title: string
  ) { }
}

class Group {
  public constructor(
    public Name:String,
    public Options: number) 
  { }
}

function printName(entity: {Name: string}) {
  console.log(entity.Name);
}

// Несмотря на то что это разные классы, они удовлетворяют требованию о наличии поля Name
printName(new User("Test", "test"));
printName(new Group("Test", 1));

// Или вообще так:
printName({Name: "Inline" });

// При этом всё равно проверяются типы:
printName({Name: 123}); // Ошибка

// Можно сказать что Name может быть числом или строкой
function printName2(entity: {Name: string|number}) {
  console.log(entity.Name);
}

// и тогда этот вызов будет корректным
printName2({Name: 123}); // Теперь не ошибка


Поиграться можно тут: http://www.typescriptlang.org/Playground
ARI ARI ARI... Arrivederci!
Отредактировано 17.10.2015 16:48 Somescout . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.