Post

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;
 numint와 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. 함수를 통해서 여러값을 반환할때 유용하다
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. 이름 있는 필드에 사용 가능
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
}
  1. 한번 생성한 레코드는 변경 불가능

 

연산자

연산자설명예시
+숫자 덧셈
문자열 병합
 
-숫자 뺄셈 
*곱셈
문자열에 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.