Съдържание
1.Деклариране на променливи
2.Дефиниране и извикване на скрипта
3.Функции
4.Подаване на аргументи към функциите
5.Връщане на резулатати от скрипт функциите
6.Достъп до аргументи от командния ред
Деклариране на променливи
В предишния урок се запознахмe със средата за разработка; тук ще погледнем по-отблизо в изходният код на calculator.fx. Кодът в червено по-долу декларира променливите. Променливите се декларират използвайки ключовите думи var или def . Разликата между двете е, че на var променливите могат да бъдат инициализирани нови стойности по време на жизнения цикъл на скрипта, докато def променливите остават с постоянни стойности след първата им инициализация. В долния код декларираме променливите numOne и numTwo, като им задаваме съответните стойности, а променливата result оставяме неинициализирана, защото в нея ще записваме резултата на нашия калкулатор:
def numOne = 100;
def numTwo = 2;
var result;
add();
subtract();
multiply();
divide();
function add() {
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}
function subtract() {
result = numOne - numTwo;
println("{numOne} - {numTwo} = {result}");
}
function multiply() {
result = numOne * numTwo;
println("{numOne} * {numTwo} = {result}");
}
function divide() {
result = numOne / numTwo;
println("{numOne} / {numTwo} = {result}");
}
Може да сте забелязали, че ние не специфицирахме типа на променливите (като низ, целочиселн, реален и т.н). Компилаторът е достатъчно умен да разбере Вашето намерение базирано на контекста, в който се използва променливата. Това е известно като тип по подразбиране (type inference). Типовете по подразбирене прави живота Ви като програмист малко по-лесен, тъй като Ви освобождава от бремето на обявяване на типовете данни за Вашите променливи.
Пример от реалнния свят: Effects Playground
Дефиниране и извикване на функции
Нашият пример Калкулатор определя някои скрипт функции, като добавяне, изваждане, умножаване и делене на две числа. Функция е изпълним блок код, който изпълнява определена задача. Червеният код по-долу определя четири функции. Всяка от тях изпълнява прости математически изчисления и след това отпечатва резултата в командния ред (конзолата).
Организирането на кода е обща практика, която прави програмите Ви лесни за четене, по-лесни за употреба и по-лесни за дебъгване.
def numOne = 100;
def numTwo = 2;
var result;
add();
subtract();
multiply();
divide();
function add() {
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}
function subtract() {
result = numOne - numTwo;
println("{numOne} - {numTwo} = {result}");
}
function multiply() {
result = numOne * numTwo;
println("{numOne} * {numTwo} = {result}");
}
function divide() {
result = numOne / numTwo;
println("{numOne} / {numTwo} = {result}");
}
Трябва да знаете, че кода на функцията не се изпълнява докато не бъде изрично извикан. Това дава възможност да стартирате функцията от всяко място във вашия код. Няма значение дали функцията е извикана преди или след нейната дефиниция. (в нашият пример ще се извикат функциите по-рано в изходния файл, отколкото, когато те действително са дефинирани):
def numOne = 100;
def numTwo = 2;
var result;
add();
subtract();
multiply();
divide();
function add() {
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}
function subtract() {
result = numOne - numTwo;
println("{numOne} - {numTwo} = {result}");
}
function multiply() {
result = numOne * numTwo;
println("{numOne} * {numTwo} = {result}");
}
function divide() {
result = numOne / numTwo;
println("{numOne} / {numTwo} = {result}");
}
Пример от реалнния свят : Draggable MP3 Player
|
Подаване на аргументи към функциите
JavaFX Script функциите могат също да бъдат дефинирани да приемат аргументи. Аргументите са специфични променливи, които се предават по време на извикване на дадената функция. По този начин може нашето приложение калкулатор да извършва изчисления на всеки две числа, а не само на стойности, които са твърдо кодирани в numOne и numTwo променливите. В действителност в тази версия ние премахнахме numOne и numTwo изцяло, оставихме само result
като единствена скрипт променлива:
var result;
add(100,10);
subtract(50,5);
multiply(25,4);
divide(500,2);
function add(argOne: Integer, argTwo: Integer) {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
}
function subtract(argOne: Integer, argTwo: Integer) {
result = argOne - argTwo;
println("{argOne} - {argTwo} = {result}");
}
function multiply(argOne: Integer, argTwo: Integer) {
result = argOne * argTwo;
println("{argOne} * {argTwo} = {result}");
}
function divide(argOne: Integer, argTwo: Integer) {
result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}
Изходът от кода е следният:
100 + 10 = 110
50 - 5 = 45
25 * 4 = 100
500 / 2 = 250
Пример от реалнния свят : Interesting Photos
Връщане на резулатати от скрипт функциите
Функциите също така могат да връщат стойност на кода, който я извиква. Например, ние можем да променим, функцията add на нашето приложение калкулатор, така че тя да връща резултат на всяко изчисление:
function add(argOne: Integer, argTwo: Integer) : Integer {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
return result;
}
В първият код в червено се посочва, че функцията връща Integer
, а вторият код в червено всъщност връща стойността.
Функцията add
може да бъде извикана и по този начин:
var total;
total = add(1,300) + add(23,52);
Ако не е посочен типа на върнатата стойност, функция връща Void по подразбиране.
Пример от реалнния свят: Animating Photos from Flickr
Достъп до аргументи от командния ред
Скриптовете съшо така могат да приемат аргументите от командния ред. В нашият пример Калкулатор, това ще даде възможност на крайните потребители да зададат числата, които да бъдат изчислени в Runtime на скрипта.
var result;
function run(args : String[]) {
// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);
// Invoke Functions
add(numOne,numTwo);
subtract(numOne,numTwo);
multiply(numOne,numTwo);
divide(numOne,numTwo);
}
function add(argOne: Integer, argTwo: Integer) {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
}
function subtract(argOne: Integer, argTwo: Integer) {
result = argOne - argTwo;
println("{argOne} - {argTwo} = {result}");
}
function multiply(argOne: Integer, argTwo: Integer) {
result = argOne * argTwo;
println("{argOne} * {argTwo} = {result}");
}
function divide(argOne: Integer, argTwo: Integer) {
result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}
Тази промяна въвежда функция, на която се подават аргументи от командния ред. За разлика от другите функции, които сте видели, run е специална функция, която служи като основа входна точка на скрипта. Функцията run запазва всички аргументи от командния ред в args, което представлява поредица от String обекти.
За да стартирате този скрипт, трябва да посочите първото и второто число в Runtime:
javafx calculator 100 50
Изходът от кода е следният:
100 + 50 = 150
100 - 50 = 50
100 * 50 = 5000
100 / 50 = 2
Имайте предвид, че във всички предишни версии на калкулатор скрипта, ние не сме дефинирали run функция. Ние просто написахм код, който се изпълнява на Script ниво. В такива случаи, компилатора тихо генерира не-ARG run функция и поставя код, за да бъде изпълнен в рамките на скрипта. Когато посочвате своя собствена run функция, името args може да бъде всичко, което искате, ние използваме "args", но вие вероятно ще видите програмисти, който използват други варианти от него, като "ARG", "ARGS", "__ARGS__", "argv" и др. Също така имайте предвид, че в този вариант върнахме обратно numOne и numTwo променливите, които сега са дефинирани вътре в run функцията вместо в скрипт нивото. (Когато дадена променлива е дефинирана във функция, тя е известна като локална променлива, тъй като е видима само за кода в рамките на същата тази функция.) Нашият калкулатор-функция очаква числа, но аргументите от командния ред са Низ, затова ние трябва да конвертираме всеки аргумент идващ от командния ред от String в Integer, преди да можем да ги предадем към функцията:
// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);
За тази цел идва помощта на Java, за да извърши конвентирането на типа. Писането на съществуващите Java функции в скрипта е необходимо за по-голяма мощност към този иначе прост скриптов език.
Пример от реалнния свят: Brick Breaker
Този откъс от "Brick Breaker" показва run функцията, която служи като главната входна точка на играта. Макар че този конкретен пример, действително не използва аргументи от командния ред, ние можем да видим, че run функцията инициализира основната рамка на приложението, като заглавието му, ширина, височина и др.
0 коментара:
Публикуване на коментар