본문 바로가기
TIL

dart 3 <= enum, 타입 관련 이야기라 재밌음

by 은지:) 2023. 11. 29.
728x90
반응형

 

 

enum 왜 씀?

 

=> 특정 값의 가능한 모든 값을 정의할 수 있음 (안전성, 코드 읽기가 쉬워짐)

=> enum 안에 있는 값만 사용 가능

=> 고유한 타입을 갖기 때문에 (int, string 등등 아님 고유한 타입을 가짐, 타입 안정성)

 

 

함수 쓸 때 이렇게 씀

void main() {
 addNum(1, 2);
 
}

int? addNum(int a, int b){
  print(a + b);
  return null;
}

 

return 안 써봤더니 경고창 뜸

js처럼 return; <= 이거 안됨

 

null 불가능한 언어라서 허용 가능하게 하려면

return 타입 알려주는 addNum 타입 옆에 ? 붙여주고

확실히 null이라고 알려줘야 함

 

+++ null undefined 차이 

 

변수 만들어 놓고 값이 할당되지 않았을 때 => undefined

그냥 값이 없는 거

 

let x;

console.log(x)

 

이런 경우임

값이 없으니 그냥 타입 자체가 undefined 임

 

 

명시적으로 값이 없을 때 null 을 씀.

그래서 타입 찍어보면 object 나옴

 

let y = null;

console.log(y)

 

이때 null이 나오는 것

 

=============================

 

 

타입 안정성 어마 무시함

void main() {
 addNum(1);
 
}

int? addNum(int a, [int? b]){
  
  if(b == null){
    print("b가 null");
    return null;
  }
  
  print(a + b);
  return null;
}

 

 

return print("안녕");


했더니 바로 리턴값 안 맞는다고 난리남

파라미터에 [] 괄호 친 건 값 없어도 된다는 뜻

 

값 없을 때 null로 변환됨

 

++

[int b = 3]

 

이렇게 옵셔널 처리해주면 값 없을 때 3으로 들어감

 

 

void main() {
 addNum(a:1,b:4);
}

int? addNum({int? a, int? b}){
  
  if(a == null || b == null){
    return null;
  }
  
  print(a + b);
  return null;
}

 

 

a :1, b:4

이렇게 지정해서 넘기면 파라미터 순서는 상관 없이 그대로 들어가지만

함수에서 ? null 값 대비해서 옵셔널 처리 꼭 해줘야함

이거 해놓고도 함수 안에서 null처리 날리는 처리 해야함

 

 

void addNum({int? a, int? b}){
  
//   print(a + b);
//   return null;
}

 

함수가 리턴값 없을 때는 void 처리

 

 

 

=========================================

 

typedef

 

함수 담아서 사용 가능하게 함

그냥 class 같음

클로저도 가넝할 수도

 

 

 

다시 보는 자바스크립트 클로저

함수 내 함수 재사용 가넝

 

 

 

operation 활용편

void main() {
  calculate(1,2,add);
  calculate(1,2,subTract);
}

typedef void Operation(int x, int y);

void add(int x, int y){
  print (x+y);
}

void subTract(int x, int y){
  print (x-y);
}

void calculate (int x, int y, Operation oper){
  oper(x,y);
}

 

깔끔해짐

 

함수 만들어 놓고

함수를 받는 함수(그래서 변수명이 좀 더 포괄적임-calculate)를 만들어서 (operation)

부를 때 깰끔하게 부름

 

클래스 안에 있는 함수들 부르는 느낌

 

js 함수형은 이렇게 쓰면 될 듯

 

 

+++ 이건 논외로 궁금해져서 해봤는데 안됨...

자바스크립트 클로저 개념은 역시 함수만 되는 듯

 

 

void main() {
  // 익명 함수를 변수에 할당
  var add = (int a, int b) {
    return a + b;
  };

  // 변수에 할당된 익명 함수 호출
  print(add(3, 4)); // 출력: 7

  // 다른 함수에 인수로 전달
  performOperation(add);
}

void performOperation(Function operation) {
  print(operation(5, 2)); // 출력: 7
}

 

 

다트에도 익명함수 있음

void main() 부르지도 않았는데 왜 실행되는가 했는데

제이쿼리의

 

$(function {

문서 로드시 실행되는 코드

})

 

와 비슷한 개념인 거 같음

위 코드는 클로저 개념 비슷무리

 

밑 코드는 찐 클로저

Function outerFunction(int a, int b) {
  print(a+b);
  
  Function innerFunction = (a,b) {
    print(a - b);
  };

  return innerFunction;
}

void main() {
  var closure = outerFunction(1,2);
  closure(1,2);

 

내부 함수 접근 가능

 

 

728x90
반응형

'TIL' 카테고리의 다른 글

dart4 - class1  (0) 2023.12.10
const test ()=>()=>{}  (0) 2023.12.07
dart 2  (0) 2023.11.27
dart 1  (2) 2023.11.27
리액트 쿼리3  (2) 2023.11.26

댓글