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);
내부 함수 접근 가능
'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 |
댓글