javaFX 기본문법 정리

프로그래밍/JavaFX 2009. 11. 9. 09:56

Lesson 2

 

Declaring Script Variables

- def : 상수

- var : 변수

 

type inference : 컴파일러가 변수의 타입을 결정한다.

 

Declaring Invoking Script Functions

- 함수는 실행될 있는 코드의 블락이다.

- 함수호출이 함수선언 전에 나오든, 함수선언 후에 나오든 상관없다.

- function [name]( argument1 : type, argument2 : type) : returnType { }

ex> function add( argOne : Integer, argTwo : Integer) : Integer{ }

 

Accessing Commmand-Line Arguments

- 아래의 함수가 javafx에서 java main 함수의 역할을 한다.

function run( args : String[]){ }

 

Lesson 3

- javafx 객체지향 언어이다.

 

Declaring Object

 

public class Address {

           public var street: String;

           public var city: String;

           public var state: String;

           public var zip: String;

}

 

def myAddress = Address {

           street : "1 Main Street";

           city : "Santa Clara";

           state : "CA";

           zip : "95050";

}

 

Lesson 4

 

data types

 

String

- var s1 = "Hello";

 

expression

- var s = "The answer is { if (ansert) "Yes" else "No"}";

 

Number and Integer

def numOne = 1.0; // Number 소숫점이 있는 숫자를 나타낸다.

def numTwo = 1; // Integer

 

Boolean

- var isAsleep = true;

 

Duration

5ms;

10s;

30m;

1h;

 

Void

- Void 는 함수가 리턴할 값이 없음을 나타내는데 사용된다.


Null

- Null 은 값이 없다는 것을 표시하기 위한 특수한 값이다.

 

Lesson 5 Sequences


- Sequence
[] 로 둘러싸이며 ,(콤마) 로 구분된다.

def weekDays = ["Mon", "Tue", "Wed", "Thu", "Fri"];

def weekDays : String[] = ["Mon", "Tue", "Wed", "Thu", "Fri"];

def days = [ weekDays, ["Sat", "Sun"]];

def nums = [1..100];

 

Using Predicates

def nums = [1..5];

def numsGreaterThanTwo = nums[n | n > 2]; // 1 에서 5중에 2보다

 

sizeof

def nums = [1..5];
println( sizeof nums); // nums
의 사이즈를 출력한다.
==> 5

 

Insert items into a Sequence

 

var days = ["Mon", "Wed"];

insert "Tue" into days; // insert into 문으로 sequence 값을 추가한다.

==>["Mon","Wed","Tue"]

insert "Tue" before days[1];
==>["Mon","Tue","Wed"]

insert "Tue" after days[0];
==>["Mon","Tue","Wed"] 

Delete items from a Sequence

delete "Mon" from days; // delete from 문으로 sequence 에서 값을 제거한다.

delete days[0];

 

Reversing the items in a Sequence

var nums = [1..5];

reverse nums; // returns [5, 4, 3, 2, 1]

 

Comparing Sequences

def seq1 = [1..5];

def seq2 = [1..5];

println( seq1 == seq2); // return true;

 

Using Sequence Slices

def days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

def weekend = days[5..6];

def weekend = days[5..];

def weedays = days[0..<5]; // equals days[0..4];

 

Function

javaFX 에서 Function 은 객체로 처리되며 String 객체와 다를께 없다.
- Function
String 처럼 함수의 인자나 리턴 값으로 설정될 수 있다.

// return value 로 설정하는 예
function returnFunction( p : Integer) : function() : Integer{
 return function():Integer{
  p + 10;
 }
}

// 인자로 설정하는 예
function argFunction( p : Integer, func : function() : Integer) : function():Integer(){
 return function():Integer{
  p + func();
 }
}

var func = returnFunction(5);
func();
==> 15

returnFunction(5)(); // ()를 사용해서 리턴된 함수를 바로 실행할 수 있다.
==> 15

argFunction( 5, func);
==> 20

Closure

아래 코드를 보면 localvar 의 변수 scope main 함수 내부라는 것을 알 수 있다.
그러면 리턴되는 함수에서는 localvar 을 사용할 수 있을까
?
결론은 사용할 수 있다. 린턴되는 함수와 main 함수는 별개의 함수이지만

리턴된 함수에서 사용되는 main 함수에서 내의 변수를 사용할 수 있다.

function main(p:Integer):function():Integer{
 var
localvar
= p;
 return function():Integer{
  ++
localvar
+ 10;
 }
}

var return = closure(5);
return(); // localvar
6
==> 16

Lesson 6 : Operators

 

+,-,*,/
+=,-=,*=,/=
--,++
mod // 11 mod 7 => 4
instanceof // "aa" instanceof String => true



Lesson 7 : Expressions

 

Block Expressions

- Block Expressions 값은 Expression 마지막 값과 같다.

ex>

var nums = [5,7,3,9];

var total = {

           var sum = 0;

           for( a in nums) { sum += a};

           sum;

}

 

println( total); // total Block 값은 total Block 마지막 변수인 sum 값이다. 따라서 24 리턴한다.

 

Range Excpression

var numbers = [10..1 step -1];

 

The for Expression

var days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

for( day in days){

           println( day);

}

 

var squares = for( i in [1..10]) i*i;

var capitalDays = for( day in days) day.toUpperCase();

 

The while Expression

 

throw new Exception( "");

 

try{

}

catch( e : Exception){

           println( "{e.getMessage()} (but we caught it)");

}

 


Lesson 8 : Data Binding and Triggers

 

Binding and Objects

Binding to a variable

def y = bind x;

- y 값은 x 값이 변할 때마다 자동으로 x 값으로 update 된다.

 


Binding to an Expression
var x= 0;
var y = bind x + 10;

Binding to an Object

var myStreet = "1 Main Street";
var myCity = "Santa Clara";
var myState = "CA";
var myZip = "95005";

def address = bind Address {
    street: myStreet;
    city: myCity;
    state: myState;
    zip: myZip;
}

객체 생성시 bind 함수를 사용하게 되면 내부 에 참조되는 변수의 값이 변경될 때마다 생성된 객체의 값이 변경된다.
> bind 사용시

myStreet = "100 Maple Street";
println( "{address.street}");
=> 100 Maple Street

> bind 사용하지 않을 때
myStreet = "100 Maple Street";
println( "{address.street}");
=> 1 Main Street

아래처럼 특정 변수만 bind 할 수도 있다.
def address = Address {
    street:
bind
myStreet;
    city: myCity;
    state: myState;
    zip: myZip;
}

Binding and Functions
- bound function
은 함수내의 모든 값이 변경될 때 재호출된다.
var scale = 1.0;
class Point{

var x : Number;
var y : Number;

}
bound function makePoint( x:Number, y:Number):Point{

Point{

x : x * scale
y : y * scale

}

}
// bound function
은 인자로 전달된 x, y 값뿐 아니라 scale 변수가 변경되었을때도 호출된다.
var myX = 3.0;
var myY = 3.0;
def pt =
bind makePoint( myX, myY); // pt 에는 makePoint 에서 리턴된 Point 객체가 담긴다.
println( pt.x); // 3.0

myX = 10.0;
println( pt.x); // 10.0

scale = 2.0;
println( pt.x); // 20.0
//
인자가 아닌 scale 변수의 값의 변화에도 적용되는게 bound 함수의 특징이다
.

- non-bound function 함수 인자의 값이 변할때에만 재호출된다.

 

Binding with Sequences

var seq1 = [1..10];

def seq2 = bind for (item in seq1) item*2;

// seq2 [2,4,6,8,10,12,14,16,18,20] 을 갖는다

insert 11 into seq1;
// seq2
seq1 값에 bind 되어 있으므로 자동으로 11*2, 22의 값이 추가된다
.
println(seq2);
=> [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22 ]

Bidirectional Bind
bind
with reverse 명령어를 통해 양방향 bind 가 가능해진다.

var x=1;
var z =
bind x with inverse
;
x=2; // z
의 값은 2 가된다.
z=3; // with inverse
명령어가 사용됬으므로 x 의 값은 3으로 설정된다
.

Replace Triggers

var password = "foo" on replace oldValue {

     println("\nALERT! Password has changed!");

     println("Old Value: {oldValue}");

     println("New Value: {password}");

};

password = "bar";

====== output ======

ALERT! Password has changed!

Old Value:

New Value: foo

 

ALERT! Password has changed!

Old Value: foo

New Value: bar

 

 

Lesson 9 : Writing Your Own Classes

 

extends

class SavingsAccount extends Account { }

 

override

override function withdraw( amount : Number) : Void { }

 

Lesson 10 : Packages

 

Lesson 11 : Access Modifiers

 

- Default Access
known as "script-only"
해당 스크립트 파일내에서만 접근이 가능하다.

- The package Access Modifier
동일 패키지 내부에서만 접근이 가능하다.

- The protected Access Modifier
동일 패키지, 하위 객체에서 접근이 가능하다.

- The public Access Modifier

- The public-read Access Modifier

- The public-init Access Modifier

 

'프로그래밍 > JavaFX' 카테고리의 다른 글

javaFX slider 를 사용하여 원의 크기 조절  (0) 2009.12.18
: