Это только предопределенный общий делегат. Используя его, вам не нужно объявлять каждого делегата. Существует еще один предопределенный делегат, Action<T, T2...>
, который является тем же, но возвращает void.
'Выразительный' означает, что легко написать код, который это легко понять, и для компилятора и для читателя.
Два фактора, которые делают для выразительности:
Сравнивают этот выразительный Groovy, с менее выразительным Java eqivalent:
3.times {
println 'Hip hip hooray'
}
по сравнению с
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
Иногда Вы обмениваете точность на выразительность - работы Groovy в качестве примера, потому что она принимает материал, который Java делает Вас для определения явно.
у Neal Grafter есть блог с хорошей кавычкой от него на предмете...
В моем уме, конструкция языка выразительна, если это позволяет Вам записать (и использование) API, который не может писаться (и использоваться) без конструкции.
я сказал бы, что это означает, что можно более естественно выразить мысли в коде.
Возможно, этот сайт http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html может помочь Вам
Короче говоря, он говорит : В моем уме конструкция языка выразительна , если это позволяет Вам записать (и использование) API, который не может писаться (и использоваться) без конструкции. В контексте Закрытий для предложенного расширения языка Java API абстракции управления являются видом вещи, которые, кажется, не поддерживаются конкурирующими предложениями.
Это - жесткое.
Для меня, это имеет отношение к простоте, по поводу которой можно выразить намерение. Это отличается на различных языках и также во многом зависит от того, что Вы хотите сделать, таким образом, это - область, где обобщения распространены. Это является также субъективным и персональным, конечно.
легко думать, что больше высокоуровневого языка всегда более выразительно, но я не думаю, что это верно. Это зависит от того, что Вы пытаетесь выразить, т.е. от проблемной области.
, Если Вы хотели распечатать число с плавающей запятой, которое имеет двоичный шаблон 0xdeadbeef
, который намного легче сделать в C, чем в Bash, например. Все же Bash, по сравнению с C, ультравысокоуровневым языком. С другой стороны, если Вы хотите запустить программу и собрать ее вывод в текстовый файл, который так прост, это почти невидимо в Bash, все же потребовал бы, по крайней мере, страницы кода в C (принимающий среду POSIX).
Я беру его, чтобы означать, что это способно к выражение идеи/алгоритмы/задачи легким для чтения и сжатым способом.
Обычно я связываю язык, являющийся выразительным с синтаксическим сахаром, хотя это не всегда имеет место. Примеры в C# его являющийся выразительным были бы:
foreach
(вместо того, чтобы явно писать повторение) using
оператор (вместо того, чтобы явно писать попытку/наконец) А другим примером были бы дженерики: прежде чем C# получил дженерики, Вы не могли выразить идеи "ArrayList
содержащий, только представляет в виде строки" в коде. (Вы могли зарегистрировать его, конечно, или записать Ваше собственное StringList
тип, но это - не совсем то же.)