javaFX 기본문법 정리
프로그래밍/JavaFX 2009. 11. 9. 09:56Lesson 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 |
---|