🐦 Flutter

flutter 기본 문법

ji-hyun 2022. 5. 28. 17:56
void main() {
  var name = "dkjlsf";
  var num = 123;
  
  print(name.runtimeType);   // String
  print(num.runtimeType);    // int
}

 

var 타입으로 쓰면 자동으로 선언할 당시 타입으로 유추해준다.

 

runtimeType 이란 실행할 당시 Type 을 말함

 

 

 

 

주의

 

void main() {
  var name = "dkjlsf";
  name = 12;
  print(name.runtimeType);
}

 

에러.. int 는 String 에 할당될 수 없다는 에러가 뜬다.

 

 

 

 

 

 

var 쓸 때는 피치 못할 사정에 쓰도록 한다.

 

void main() {
  Map<String, Map<int, List<double>>> testType = {};
}

 

 

 

 

 

void main() {
  String name = "ㄹ나ㅣ";
  String name2 = "sfls";
  
  print("${name} ${name2}");
}

 

 

 

 

 

 

void main() {
  String name = "ㄹ나ㅣ";
  String name2 = "sfls";
  
  print("${name.runtimeType} ${name2}");
}

 

 

 

 

 

var, dynamic 타입의 차이점

var 는 선언할 당시 타입으로 fix 가 된다.

 

void main() {
  dynamic name = "123";
  name = 123;
  
  print(name.runtimeType);
}

 

 

 

 

 

 

 

void main() {
  String? name = "dkdkd";
  name = null;
  print(name);
}

 

 

 

nullable => ?

non-nullable =>  !

null

 

 

 

 

void main() {
  String? name = "dkdkd";
  name = null;
  
  print(name!);    // 느낌표 붙이면 에러
}

 

 

 

 

final 선언하면 값을 변경할 수 없다

const 도 그렇다.

 

 

void main() {
  final String name = "ds";
  
  final name2 = "sfsf";
}

 

타입 생략 가능. const 도 동일

 

 

 

 

 

void main() {
  final DateTime now = DateTime.now();
  final DateTime now2 = DateTime.now();
  print(now);
  print(now2);
}

 

버튼을 눌렀을 때의 기준의 시간이 아니라 이 코드가 실행할 당시의 time 이기 때문에 now, now2 는 다른 결괏값을 보인다.

(하지만 코드가 몇 줄 안되서 실제로 실행해보면 차이가 안남)

 

 

 

 

 

void main() {
  final DateTime now = DateTime.now();

  print(now);
  const DateTime now2 = DateTime.now();
  
  
}

 

const 에서 에러가 난다.

여기서 final 과 const 의 차이를 볼 수 있는데

const 는 빌드 당시 타입을 알아야 하고 final 은 빌드 당시 타입을 몰라도 된다는 차이점을 가지고 있다.

 

 

 

 

 

 

 

??= 

 

void main() {
  String? name = "sfs";
  
  name  = null;
  
  print(name ??= "dsfs");
  
  
}

 

이 기호의 뜻은 null 이면 오른쪽으로 바꿔라라는 뜻이다.

 

 

 

 

 

 

void main() {
  int num = 1;
  
  print(num is int);
  print(num is! int);
}

 

 

 

 

 

List<제너릭>

add, remove, indexOf (인덱스 가져옴)

 

 

 

 

 

Map

꼭 키와 값 쌍으로  (key, value)

void main() {
  Map<String, bool> dictionary = {"a": true, "b": false, "c": true};

  dictionary.addAll({"d": false});
  
  
  print(dictionary);
  
  
  dictionary["a"] = false;
  
  print(dictionary);
  
  dictionary["f"] = true;
  
  print(dictionary);
  
  dictionary.remove("a");
  
  print(dictionary);
  
  print(dictionary.keys);
  print(dictionary.values);
}

 

 

 

 

 

Set

키와 값이 아님. 리스트와 비슷함

단, 중복값이 들어있을 수 없음

 

 

void main() {
  final Set<String> obj = {
    "flutter",
    "tistory",
    "cake",
    "flutter"
  };
  
  print(obj);
  
  
  obj.add("apple");
  print(obj);
  obj.remove("apple");
  print(obj);
  
  print(obj.contains("cake"));
}

 

 

메소드는 리스트와 거의 동일

 

 

 

 

void main() {
  int number = 2;
  
  switch(number % 2){
    case 0: 
      print("0");
      break;
    case 1: 
      print("1");
      break;
    default: 
      print("s");
      break;
  }
}

 

 

 

 

 

void main() {
  int number = 0;
  
  List<int> lists = [1,2,3,4,5,6];
  
  for(int i = 0; i < lists.length; i++){
  number += lists[i];
  }
  
  print(number);
  
  for(int l in lists ){
    number += l;
  }
  
  print(number);
}

 

 

 

 

 

 

enum Status {
  approved,
  pending,
  rejected
}

void main() {
  Status status = Status.approved;
  
  if (status == Status.approved) print("승인");
}

 

 

 

 

 

 

optional parameter

positional parameter 는 순서가 중요한 파라미터... 생략

optional parameter 는 있어도 되고 없어도 되는 파라미터 => [ ] 사용

 

 

사용법

 

void main() {
  addNumbers(1);
  
}


addNumbers(int x, [int y, int z]) {    // 에러
  int sum = x + y + z;
  
  print("$x");
  print("$y");
}

 

y, z 에 에러 표시가 뜬다.

왜냐면 y, z 는 nullable 일 수 있기 때문

 

에러 내용

the parameter 'y' can't have a value of 'null' because of its type, but the implicit default value is 'null'

try adding either an emplicit non-'null' default value or the 'required' modifier.

 

 

 

 

 

void main() {
  addNumbers(1);
  
}


addNumbers(int x, [int? y, int? z]) {
  int sum = x + y + z;   // 이번엔 여기 y, z 에러
  
  print("$x");
  print("$y");
}

 

에러 이유

숫자랑 null 을 더할 수 없다.

 

 

 

 

 

 

void main() {
  addNumbers(1);
  
}


addNumbers(int x, [int y = 20 , int z = 30]) {
  int sum = x + y + z;
  
  print("$x");
  print("$y");
  print(sum);
}

 

[ ] 안에 default value 를 써주면 된다.

 

 

 

 

 

 

 

 

named parameter 

이름이 있는 파라미터

순서가 중요하지 않다.

 

void main() {
  addNumbers(x: 1, y: 2, z: 3);
  addNumbers(y: 2, z: 3, x: 1);    
  // 이 둘은 결괏값이 같다.
  
}


addNumbers({required int x, required int y, required int z}) { // 여기도 순서를 바꿔도 마찬가지
  int sum = x + y + z;
  
  print("$x");
  print("$y");
  print(sum);
}

 

 

 

 

 

 

void main() {
  addNumbers(x: 1, y: 2);
  addNumbers(y: 2, z: 3, x: 1);
}

addNumbers({required int y, required int x, int z = 10}) {
  int sum = x + y + z;

  print("$x");
  print("$y");
  print("$z");
  print(sum);
}

 

 

 

 

반환형

 

void main() {
  int result = addNumbers(x: 1, y: 2);

}

int addNumbers({required int y, required int x, int z = 10}) {
  int sum = x + y + z;
  
  return sum;
}

 

 

 

 

 

 

 

named parameter 와 positional paramter 같이 쓰고 싶다면?

 

void main() {
  int result = addNumbers(1, z: 2, y: 1);
  print(result);
}

int addNumbers(int x, {required int y, int z = 10}) {
  int sum = x + y + z;
  
  return sum;
}

 

 

 

 

 

 

 

 

operation

 

void main() {
  Operation operation = add;  // 함수 할당
  
  int result = operation(1,2,3);
  print(result);
  
  operation = subtract;
  int result2 = operation(1,2,3);
  
  print(result);
}

typedef Operation = int Function(int x, int y, int z);


int add(int x, int y, int z) => x + y + z;  // parameter 가 위와 동일해야 함

int subtract(int x, int y, int z) => x - y - z;

 

 

 

 

하지만 보통 아래와 같은 방식을 쓴다.

 

void main() {
  Operation operation = add;
  
  int result = operation(1,2,3);
  print(result);
  
  int result2  = caculate(1,2,3, add);
  print(result2);
  
  int result3 = caculate(1,2,3, subtract);
  print(result3);
}

typedef Operation = int Function(int x, int y, int z);


int add(int x, int y, int z) => x + y + z;

int subtract(int x, int y, int z) => x - y - z;


int caculate(int x, int y, int z, Operation operation) => x + y + z;

 

 

'🐦 Flutter' 카테고리의 다른 글

Flutter 생명주기  (0) 2022.07.05
[Flutter] json 파싱 정보글 모음  (0) 2022.06.24
dart 비동기 프로그래밍  (0) 2022.06.02
dart 함수형 프로그래밍  (0) 2022.05.31
dart OOP  (0) 2022.05.30