primaryExpression

 Рисунок 6.36. primaryExpression

primaryExpression

qualifiedName

Полностью определенное имя является ссылкой на пакет или class. Ссылка определяется точкой разделенный список имен подпакета и пакета.

 Рисунок 6.37. qualifiedName

qualifiedName

java.lang. Объект является полностью определенным именем, ссылающимся на Объект class в lang подпакете пакета java. Они - некоторые способы, которыми используются полностью определенные имена:

import java.util.GregorianCalendar;
class FooWriter extends java.io.PrintWriter {}
var baseFile = new java.io.File("base.txt");

objectLiteral

Объектный литерал является основным способом, которым новые экземпляры class создаются в Сценарии JavaFX. Они также позволяют добавлять новую функциональность к экземпляру включая функции и дополнительные пункты на замене на переменных экземпляра.

 Рисунок 6.38. objectLiteral

objectLiteral

 Рисунок 6.39. objectLiteralPart

objectLiteralPart

 Рисунок 6.40. objectLiteralInit

objectLiteralInit

qualifiedName должен сослаться на Сценарий JavaFX class.

Поскольку эти примеры принимают Точку class, определенный как это:

class Point {
   var x : Number;
   var y : Number;
}

Объектный литерал создает экземпляр class и устанавливает начальные значения переменных экземпляра:

def somewhere = Point {
   x: 3.2
   y: 7.8
}

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

Объектный литерал не должен обеспечить инициализаторы например переменные, хотя некоторые классы могут потребовать, чтобы определенные переменные экземпляра были инициализированы для надлежащего функционирования экземпляра. Таким образом они допустимы:

def default = Point {}
def high = Point {
   y: 92.1
}

См. главу Классов для получения дополнительной информации об инициализации переменной экземпляра.

Переменные и функции, локальные для объектного литерала, могут быть предоставлены, чтобы помочь в его конструкции. Здесь, радиус локальной переменной определяется.

def location = Point {
   def radius = 10.3;
   x: radius * 2
   y: radius * 5
}

Часто локальные переменные используются в конструкции вложенных объектных литералов, чтобы позволить перекрестно ссылаться. Например:

class Tree {
   var value : String;
   var children : Tree[];
   var previousSibling : Tree;
   function format(indent : String) : String {
      "{indent}{value} "
      "{if (previousSibling != null) '(prev:{previousSibling.value})' else ''}"
      "\n"
      "{for (kid in children) kid.format('   {indent}')}"
   }
}

def root = Tree {
   def tunicates = Tree {
      value: 'Urochordata'
   }
   def skulledBeasts = Tree {
      def hagfish = Tree {
         value: 'Hyperotreti' 
      }
      def us = Tree {
         value: 'Vertebrata'
         previousSibling: hagfish
      }
      value: 'Craniata'
      children: [ hagfish, us ]
      previousSibling: tunicates
   }
   value: 'Chordata'
   children: [ tunicates, skulledBeasts]
}

println( root.format("") );

Который использует локальный defs в пределах вложенных объектных литералов, чтобы построить одноуровневые отношения. Его вывод:

Chordata
   Urochordata
   Craniata (prev:Urochordata)
      Hyperotreti
      Vertebrata (prev:Hyperotreti)

Дополнительные пункты на замене могут быть добавлены к примеру Точки, переопределяя переменную экземпляра:

def current = Point {
   override var x on replace { println( "Changed x to {x}" ) }
   override var y on replace { println( "Changed y to {y}" ) }
   x: 66.6
   y: 33.3
}
current.x = 99.9;

Это напечатает:

Changed x to 66.6 
Changed y to 33.3 
Changed x to 99.9

Инициализатор переменной экземпляра может быть однонаправлено или двунаправлено связанное выражение как этот объектный литерал (который сохраняет его Точку на круге), демонстрирует:

import java.lang.Math.*;
var angle = 0.0;
def onCircle = Point {
   x: bind cos(angle)
   y: bind sin(angle)
   override function toString() : String { "Point({%4.1f x}, {%4.1f y})" }
}
println( onCircle );
angle = 0.5 * PI;
println( onCircle );
angle = PI;
println( onCircle );
angle = 1.5 * PI;
println( onCircle );
angle = 2 * PI;
println( onCircle );

X переменная экземпляра onCircle будет сохраняться как косинус угла, в то время как y будет сохраняться как синус. См., что Обязательная глава для получения дополнительной информации связывает. toString () функция (определенный на Объекте) был переопределен в объектном литерале, чтобы обеспечить лучший выходной формат. Это - то, что печатается к консоли:

Point( 1.0, 0.0) Point( 0.0, 1.0) 
Point(-1.0, 0.0) 
Point(-0.0, -1.0) 
Point( 1.0, -0.0)

Значение объектного литерала является новым экземпляром. Типом объектного литерала является class, данный в qualifiedName.

это

Это выражение является ссылкой на текущий экземпляр.

[Чтобы сделать: добавьте примеры, схему синтаксиса, описание]

stringExpression

 Рисунок 6.41. упрощенный StringExpression

упрощенный StringExpression

Где два маркера КАВЫЧКИ соответствуют одинарную или двойную кавычку.

Как строковые литералы, смежные строковые выражения (и строковые литералы) автоматически связываются во время компиляции.

[Чтобы сделать: опишите переносимое Средство форматирования, которое обрабатывает общее подмножество]

explicitSequenceExpression

Создает последовательность, явно перечисляя элементы последовательности.

 Рисунок 6.42. explicitSequenceExpression

explicitSequenceExpression

 Таблица 6.9. Явные Значения Выражения Последовательности

Явное Выражение Последовательности Значение Обсуждение
['Один', 'Два', 'Застежка', 'Мой', 'Обувь'] ['Один', 'Два', 'Застежка', 'Мой', 'Обувь'] Явная последовательность Строки
[4, 7, [9, 3], 2] [ 4, 7, 9, 3, 2 ] Последовательности не вкладывают, таким образом, встроенные последовательности являются flattenned
var x = 32; [x, 4, x] [ 32, 4, 32 ] Явный компонент последовательности является valueExpressions.
var seq = ['бибоп',]; ['быть', seq, 'lulu'] ['будьте', 'танцуете бибоп', 'lulu'] Снова, последовательности сглаживаются
var nada = нуль; ['быть', nada, 'lulu'] ['быть', 'lulu'] нуль, отсутствие имеющее значение, таким образом эквивалентное пустой последовательности, которая только сглаживается далеко.


rangeExpression

Создает последовательность, которая является диапазоном значений Целого числа или Числа.

 Рисунок 6.43. rangeExpression

rangeExpression

Три valueExpressions, которые дают начало, окончание и шаг последовательности, должны или иметь Целое число типа или Число. Если какой-либо из них имеет Число типа, rangeExpression имеет последовательность типа Числа, иначе это имеет последовательность типа Целого числа.

Шаг valueExpression если отсутствующий, значения по умолчанию одному. Шаг может быть отрицательным. Значения в последовательности являются всем значением между началом valueExpression и окончанием valueExpression, где значения ступают шагом valueExpression. Начало valueExpression является содержащим. Окончание valueExpression не является содержащим если.. <форма используется.

Вот некоторые выражения диапазона, и их соответствующие значения:

 Таблица 6.10. Значения Выражения диапазона

Выражение диапазона Значение Обсуждение
[1..5] [ 1, 2, 3, 4, 5 ] Никакой явный шаг не обеспечивается, таким образом, значение по умолчанию каждый используется. Начало и окончание valueExpressions имеют Целочисленный тип, таким образом, элементы последовательности имеют Целочисленный тип.
[1..<5] [ 1, 2, 3, 4 ] Меньше знак указывает один (содержащий) до пять (монопольный).
[1 .. 5.0] [ 1.0, 2.0, 3.0, 4.0, 5.0 ] Окончание valueExpression имеет тип Числа, таким образом, элементы последовательности имеют тип Числа.
[8.6 .. 12] [ 8.6, 9.6, 10.6, 11.6 ] 8.6, тогда 1 + 8.6, и т.д.
[1.. 9 шагов 2] [ 1, 3, 5, 7, 9 ] Явный шаг два: 1, 2 + 1, и т.д.
[100.. 90 шагов-3] [ 100, 97, 94, 91 ] Отрицательный шаг, значения уменьшаются.
[0.. 1 шаг 0.25] [ 0.0, 0.25, 0.5, 0.75, 1.0 ] Дробный шаг
[0.. <1 шаг 0.25] [ 0.0, 0.25, 0.5, 0.75 ] Монопольный из окончания.
[5..1] [ ] Нет никаких значений между пять и тот, ступая одним, получающаяся последовательность пуста. Так как начало и окончание значений являются литералами, это может быть обнаружено компилятором, который печатает предупреждение.

Начало, заканчиваясь и шаг не должны быть литеральными значениями, но могут быть произвольным valueExpressions.

блок

Блок является списком выражений. Клеточные виды контекст.

 Рисунок 6.44. блок

блок

Тип блока является типом заключительного выражения в блоке. Значение блока является значением последнего выражения в блоке. Например:

println( {
   var sum = 0;
   var counter = 10;
   while (counter > 0) {
      sum += counter;
      --counter;
   }
   "Sum is {sum}"
} )

Блок, напечатанный println,

литерал

Литеральные значения обсуждаются в главе Типов и Значений.

 Рисунок 6.45. литерал

литерал

functionExpression

Функциональное выражение позволяет Вам выражать функциональное определение как значение.

 Рисунок 6.46. functionExpression

functionExpression

 Рисунок 6.47. formalParameters

formalParameters

 Рисунок 6.48. formalParameter

formalParameter

Например:

var func : function(:Integer):Integer;
func = function(n : Integer) { 1000 + n }
println( func(7) );
func = function(n : Integer) { n * n }
println( func(7) );

Здесь func является переменной, которая, как объявляют, имела функциональный тип. func тогда присваивается функция, которая берет Целое число и добавляет одна тысяча к нему. Функция, сохраненная в переменной, может тогда быть вызвана, в этом случае печатая 1007. Затем func повторно присваивается новому функциональному определению, которое придает входящему Целому числу квадратную форму; на сей раз, func (7) 49.

Инициализаторы переменной экземпляра используются, чтобы сконфигурировать начальное состояние экземпляра. С переменными экземпляра функционального типа функциональные выражения используются, чтобы сконфигурировать действия для экземпляра.

Этот class создает серию Строк, основанных на начальном значении и следующей функции:

class SeriesBuilder {
   var initial : String;
   var next : function(:String):String;
   function series(count : Integer) : String[] {
      var current = initial;
      var result = [initial];
      for (idx in [1..count]) {
         current = next(current);
         insert current into result;
      }
      result
   }
}

def aba = SeriesBuilder {
   initial: 'X'
   next: function(curr : String) { "{curr}o{curr}" }
}

def shorten = SeriesBuilder {
   initial: 'lambda'
   next: function(curr : String) { curr.substring(1) }
}

def bop = SeriesBuilder {
   initial: 'Lake'
   next: function(curr : String) { ['Beach', 'Mountains', 'Desert'][curr.length() mod 3] }
}

println( aba.series(4) );
println( shorten.series(5) );
println( bop.series(5) );

Три совсем других последовательности Строк производятся данные три различных начальных значения и следующих функциональных пар. Следующее печатается:

[ X, XoX, XoXoXoX, XoXoXoXoXoXoXoX, XoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX ] 
[ lambda, ambda, mbda, bda, da, a ]
[ Lake, Mountains, Beach, Desert, Beach, Desert ]

timelineExpression

timelineExpression используется в анимации. См. главу Анимации.

 Рисунок 6.49. timelineExpression

timelineExpression

 Рисунок 6.50. keyFrameLiteralPart

keyFrameLiteralPart




Spec-Zone.ru - all specs in one place