[OSAM] DART 언어 기초(5) Function, typedef

hello_hidi·2021년 7월 20일
0

[국소아] DART

목록 보기
5/16
post-thumbnail

> Function

1) 함수의 형태
타입명 함수이름(파라미터 => 타입 명시 중요!)

int sum(int a, int b){
  return a+b;
}
void main(){
  int result = sum(3,4);
  print(result);
}

2) optional parameter
-> 넣어도 되고 안 넣어도 되는 파라미터 => [ ] 사용
-> 디폴트 값을 대괄호 안에서 지정가능 ex)[int b = 3]

void printAB(int a, [int b]){
  print(a);
  print(b);
}
void printAB2(int a, [int b = 3]){
  print(b);
}
void main(){
  printAB(3); //3 null(b값을 안 넣었기 때문)
  printAB2(3); //  3(디폴트 값이 출력됨)
}

3) 순서랑 관계없이 파라미터 넣는 법
파라미터값이 많아지면 순서가 헷갈리게 됨 SO { }를 활용해서 해결할 수 있다!

int sum({int a, int b, int c, int d}){
  return a + b + c + d;
}
void main(){
  int result = sum( //인자를 넣을때 ':' 사용
    b : 1,
    a : 3,
    d : 4,
    c : 2
  );
  print(result);
}

> Anonymous functions

익명함수 : 다른 함수처럼 변수에 할당하여 컬렉션에서 추가하거나 제거할 수 있음!
1) 함수를 파라미터로 받는 함수 필요!
ex) void routine(Function start){start();}
2) 익명함수 형태 : 함수이름((){실행문});({ } 중요)
ex) routine((){print("짜파게티 먹기"});
3) 람다함수 : 함수이름(()=>실행문);
ex)routine(()=>"신라면 먹기");

  • 람다함수와 익명함수의 차이점
    : 익명함수는 두줄 이상일 때, 람다함수는 한줄 표현 대신에 =>가 return 역할을 대신함
//하루 루틴을 결정해주는 함수
void routine(Function start){
  String result = start();
  print(result);
}
void main() {
  routine((){ 
    //두줄 이상이면 익명함수를 사용해야된다.
    print("짜파게티 먹는 생각에 행벅~");
    return "짜파게티";
  });
  //한줄만 적어서 리턴을 원할 경우 람다
  routine(()=> "신라면 먹기"); 
}
출력
짜파게티 먹는 생각에 행벅~
짜파게티
신라면 먹기

> typedef

typedef : 함수를 변수처럼 사용가능하게 해줌!
ex) //MAIN 밖에서
typedef 이름(대문자) (파라미터); 함수들 이것저것 선언
typedef이름 변수이름 = 함수; => 함수를 변수처럼

typedef Operation(int x, int y);
  void add(int x, int y){
    print(x + y);
  }
  void subtract(int x, int y){
    print(x - y);
  }
void main(){
  add(1, 2);
  subtract(4, 3);
  Operation oper = add; //함수를 변수처럼
  oper(1, 2); // 3
  oper = subtract; //함수 변경도 가능
  oper(4, 3); // 1
}


profile
안뇽희디

0개의 댓글