Flutter를 위한 dart
Flutter를 위한 dart
플러터를 이용하기 위해서는 dart 언어를 사용할 수 있어야한다 dart는 기존 프로그래밍 언어들과 비슷하기 때문에 문법 자체는 그렇게 어려워 보이지 않는다 dart는 main 함수를 실행해 파일이 실행된다 또한 마지막에 ;을 사용한다
Hello World! 출력
1
2
3
void main() {
print("Hello World!");
}
위 코드를 dart 확장자 파일에 저장하고 실행시키면 콘솔창에 Hello World가 출력된다
변수/ 타입
| 구분 | 타입 | 설명 |
|---|---|---|
| 숫자 | int | 정수형으로 소수점을 포함하지 않음 int a = 1234; |
| double | 실수 타입 소수점을 포함 double b = 12.34; | |
| num | int와 double을 두개 모두 포함하는 타입 정수형 실수형 모두 사용가능 | |
| 문자열 | String | 문자열 작은 따음표, 큰 따음표 둘중 하나로 감싸야한다 |
| 논리 | bool | 참 거짓 논리값 bool c = true; |
| 콜렉션 | List | 순서가 있는 여러 값들 [ ] 대괄호를 사용 값이 중복될 수 있다 서로 다른 자료형도 저장 가능 List<String> 이렇게 형식 지정도 가능 |
| Set | 순서가 없고 중복되지 않는 값들 { } 중괄호를 사용 List 처럼 내부 타입 지정 가능 | |
| Map | 키,값 형식 { } 중괄호 사용 Map<int, String> data = { 1 : "answer"} | |
| 기타 | Object | 모든 다트 타입의 상위 타입 |
| DateTime | 날짜와 시간을 표시하기 위해서 사용한다 DateTime a = DateTime(2024,12,26,02,22,33); | |
| dynamic | 동적 타입으로 어떤 타입의 값이든 포함할 수 있다 | |
| 타입? | Null을 포함할 수 있는 타입 int? 이렇게 선언하면 Null을 포함 가능 | |
| Recode | 여러 개의 값을 그룹화할 수 있는 타입 불변(immutable) 구조 위치 기반 또는 이름 있는 필드 지원 예: (int, String) a = (42, "Alice");({int id, String name}) b = (id: 1, name: "Bob"); |
Recode
- 함수를 통해서 여러값을 반환할때 유용하다
1
2
3
4
5
6
7
8
9
(int, String) getUserInfo() {
return (42, "Alice");
}
void main() {
var userInfo = getUserInfo();
print(userInfo.$1); // 42
print(userInfo.$2); // Alice
}
- 이름 있는 필드에 사용 가능
1
2
3
4
5
6
7
8
9
({int id, String name}) getUserInfo() {
return (id: 42, name: "Alice");
}
void main() {
var userInfo = getUserInfo();
print(userInfo.id); // 42
print(userInfo.name); // Alice
}
- 한번 생성한 레코드는 변경 불가능
연산자
| 연산자 | 설명 | 예시 |
|---|---|---|
| + | 숫자 덧셈 문자열 병합 | |
| - | 숫자 뺄셈 | |
| * | 곱셈 문자열에 n자연수를 곱하면 그만큼 반복 | print(‘o’ * 2) |
| / | 나눗셈 정수끼리 나눠도 실수가 된다 | |
| ~/ | 나눗셈의 몫 | print(10 ~/ 3) //3 |
| % | 나눗셈의 나머지 | print(10 % 3) //1 |
| ++변수 | 연산전 변수에 1을 더함 | |
| –변수 | 연산전 변수에 1을 뺌 | |
| 변수++ | 연산후 변수에 1을 더함 | |
| 변수– | 연산후 변수에 1을 뺌 | |
| == | 두 값이 같은지 비교 bool으로 결과 | |
| != | 두 값이 다르면 true | |
| >, <, >=, <= | 양쪽 두 변수의 크기 비교 | |
| *=, +=, -=등 | 변수에 사칙연산 후 재할당 | a += 3 // a = a + 3 |
| !변수 | bool값을 반전 | |
| || | 표현식 or 연산 | |
| && | 표현식 and 연산 |
조건문
1
2
3
4
5
6
7
8
9
10
void main() {
int a = 3;
if (a < 3) {
print("3보다 작ㅏ");
} else if (a == 3) {
print("a == 3");
} else {
print("3보다 큼");
}
} // a == 3 출력
반복문
for문 사용
1
2
3
4
5
6
7
void main() {
for(int a=3;a<6;a++){
print(a);
}
}//3
//4
//5
리스트에 들어있는 값을 이용하기
1
2
3
4
5
6
7
8
void main() {
List list = ["a","b","c"];
for(String number in list){
print(number);
}
}//a
//b
//c
while문 사용
1
2
3
4
5
6
7
8
9
10
void main() {
List list = ["a","b","c"];
int i = 0;
while(i<3){
print(list[i]);
i++;
}
}//a
//b
//c
반복문 내부에서 continue, break 사용 가능하다
Switch문 (패턴 매칭)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main() {
int number = 2;
switch (number) {
case 1:
print("Number is 1");
break;
case 2:
print("Number is 2");
break;
case 3:
print("Number is 3");
break;
default:
print("Number is unknown");
}
} //Number is 2
리스트 패턴 매칭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
var list = [1, 2, 3];
switch (list) {
case [1, 2, 3]:
print('Matched exact list');
break;
case [1, _, _]: // 와일드카드(_)는 아무 값이나 매칭
print('Starts with 1');
break;
default:
print('No match');
}
} //Matched exact list
맵 패턴 맵 구조를 매칭하고 특정 키의 값을 추출한다
1
2
3
4
5
6
7
8
9
10
11
void main() {
var map = {'key1': 'value1', 'key2': 'value2'};
switch (map) {
case {'key1': 'value1', 'key2': var value}:
print('Key2 value is $value');
break;
default:
print('No match');
}
}//Key2 value is value2
타입 검사 패턴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
dynamic value = 42;
switch (value) {
case int v:
print('Value is an integer: $v');
break;
case String v:
print('Value is a string: $v');
break;
default:
print('Unknown type');
}
}//Value is an integer: 42
This post is licensed under CC BY 4.0 by the author.