App/Flutter

Dart 문법 익히기 1

원2 2022. 5. 18. 22:27
728x90
반응형

 

Flutter 실전으로 들어가기 전에 Dart 문법을 익혀보자!

간단하게 웹으로 Dart 를 실행 할 수 있는 DartPad 로 익혀보자

 


Dart 변수와 타입 확인

 

${} 를 사용하면 문자열에 변수를 바인딩 할 수 있다.

void main () {
  int n1 = 1;
  double d1 = 10.1;
  bool b1 = true;
  String s1 = "홍길동";
  
  print("정수 : ${n1}");
  print("실수 : ${d1}");
  print("부울 : ${b1}");
  print("스트링 : ${s1}");
  print("-----------------------");
  print("정수 : ${n1.runtimeType}");
  print("실수 : ${d1.runtimeType}");
  print("부울 : ${b1.runtimeType}");
  print("스트링 : ${s1.runtimeType}");
  
}

 

결과

 

 


타입 추론

 

Dart 언어는 타입 추론을 지원

값이 들어올 때 타입을 추론하여 변수를 초기화한다

 

var 과 dynamic 의 차이

 

var 은 타입 변경이 불가능

dymanic 은 타입변경이 가능

 

 

var

void main () {
  var n1 = 1;
  var d1 = 10.1;
  var b1 = true;
  var s1 = "홍길동";
  
  print("정수 : ${n1}");
  print("실수 : ${d1}");
  print("부울 : ${b1}");
  print("스트링 : ${s1}");
  print("-----------------------");
  print("정수 : ${n1.runtimeType}");
  print("실수 : ${d1.runtimeType}");
  print("부울 : ${b1.runtimeType}");
  print("스트링 : ${s1.runtimeType}");
  
}

 

결과

 

var 로 한 번 초기화 된 데이터 타입은 다른 타입 으로 변경이 불가능하다.

 

void main () {
  var n1 = 1;
  var d1 = 10.1;
  var b1 = true;
  var s1 = "홍길동";
  
  print("정수 : ${n1}");
  print("실수 : ${d1}");
  print("부울 : ${b1}");
  print("스트링 : ${s1}");
  print("-----------------------");
  print("정수 : ${n1.runtimeType}");
  print("실수 : ${d1.runtimeType}");
  print("부울 : ${b1.runtimeType}");
  print("스트링 : ${s1.runtimeType}");
  
  n1 = 10.5;
  print("타입 추론 결과 : ${n1}");
  
}

결과

타입이 맞지 않다고 에러가 발생한다.

 


dynamic

dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로도 변경도 가능

 

void main () {
 dynamic n1 = 1;
 print("정수 : ${n1.runtimeType}");
  
  // dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로도 변경도 가능
  
  n1 = 0.5;
  print("타입 변경 : ${n1.runtimeType}");
  
  n1 = "안녕하세요?";
  print("타입 변경 : ${n1.runtimeType}");
}

 

결과

모든 n1 출력


연산자

 

산술연산자

수학에서 사용하는 사칙연산과 나머지 연산을 포함하는 연산자 몫을 구하는것도 포함

 

 

void main () {
  //   더하기
  print("3+2= ${3+2}");
  
  //   빼기
  print("3-2= ${3-2}");
  
  //   곱하기
  print("3*2= ${3*2}");
  
  //   나누기
  print("3/2= ${3/2}");
  
  //   나머지
  print("3%2= ${3%2}");
  
  //   몫
  print("3~/2= ${3~/2}");

}

결과


비교 연산자

두 개의 값을 비교하여 결과를 참/거짓으로 반환하는 연산자

 

void main() {
  //   같다
  print("2=3  ->  ${2 == 3}");
  //   다르다
  print("2!=3  ->  ${2 != 3}");
  //   왼쪽 값 보다 크다
  print("2<3  ->  ${2 < 3}");
  //   왼쪽 값 보다 작다
  print("2>3  ->  ${2 > 3}");
  //   왼쪽 값 보다 크거나 같다
  print("2<=3  ->  ${2 <= 3}");
  //   왼쪽 값 보다 작거나 같다
  print("2>=3  ->  ${2 >= 3}");
}

 

결과

 


논리연산자

두 개의 참/거짓 값으로 새로운 참/거짓을 반환하는 연산자

void main() {

//   부정
  print("!true -> ${!true}");
//   그리고
  print("true && false -> ${true && false}");
  print("true && true -> ${true && true}");
//   또는
  print("true || true -> ${true || false}");
}

결과


조건문

 

조건이 참이면, 참이 아니면 구분

 

void main() {

int point = 90;
  
  if (point >= 90) {
    print("A");
  } else if (point >= 80) {
    print("B");
  } else if (point >= 70) {
    print("C");
  } else if (point >= 60) {
    print("D");
  } else if (point >= 50) {
    print("F");
  }
}

결과


삼항연산자

조건식 ? 참이면 실행 : 거짓이면 실행

 

void main() {

  int point = 90;
//   조건식 ? "참" : "거짓"
  print(point >= 60 ? "합격ㅋ" : "불합격ㅋ");
}

결과


null 대체 연산자

변수의 값이 null 이면 ?? 뒤의 값 출력, null 이 아니면 변수의 값이 출력

void main() {

  var username = null;
  
  print(username);
//   변수 값이 null 이면 "김나무"
  print(username ?? "김나무");
}

결과


 

함수

함수란 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합

함수를 사용하는 이유는 반복적인 프로그래밍을 피하고 코드를 재사용할 수 있게 해준다.

함수로 코드를 나누어 작성하면 모듈화가 되고 가독성이 좋아지면서 문제가 발생 했을 때 손쉽게 유지보수 할 수 있다.

 

함수의 형태

 

void main() {

//   add(2) => call function
//   (2) => 함수 호출 시 전달 인수
//   int result => 반환된 결과 값을 받는 변수
  int result = add(2);
  print("result = ${result}");
  
}

int add(int n) {
  
//   int => return type
//   add => function name
//   (int n) => parameter
//   retrun n+1 => retrun result
  return n+1;
}

결과

 

구구단을 출력하는 함수

 

void main() {
  
  gogodan(3);
}

void gogodan(int num) {
  print("${num} * 1 = ${num*1}");
  print("${num} * 2 = ${num*2}");
  print("${num} * 3 = ${num*3}");
  print("${num} * 4 = ${num*4}");
  print("${num} * 5 = ${num*5}");
  print("${num} * 6 = ${num*6}");
  print("${num} * 7 = ${num*7}");
  print("${num} * 8 = ${num*8}");
  print("${num} * 9 = ${num*9}");
  
}

결과

노가다 출력 잼ㅋ


익명함수와 람다식

익명함수와 람다식의 가장 큰 차이

익명함수 -> return 키워드 필수

람다식 ㄱㅊㅋ

 

익명함수 말 그대로 이름이 없다

(매개변수){동작 혹은 반환값}

 

1

// 함수를 매개변수로 전달 받을 때에는 Function 키워드를 사용
void magicBox(Function f) {
  
  f();
}

void main() {
//   익명 함수를 인수로 전달할 수 있다.
  magicBox(() {
    
    print("Hello world!!");
  });
}

결과

2

// 변수에 익명 함수를 대입할 수 있다
// 이때 Function 타입을 사용
Function add = (int n1, int n2) {
  print(n1 + n2);
};

void main() {
  add(1,3);
}

결과


람다식

함수를 하나의 식으로 표현

(매개변수) => 동작 혹은 반환 값

 

void main() {
//   람다 표현식
  Function addOne = (n) => n + 1;

  print(addOne(6));

//   익명함수
  Function addTwo = (n) {
    return n + 2;
  };

  print(addTwo(2));
}

결과

** function 은 클래스 외부에 존재하고 method 는 클래스 내부에 존재

 

 

728x90
반응형

'App > Flutter' 카테고리의 다른 글

Flutter 이해하기  (0) 2022.05.16