Flutter/Dart 문법

[Dart] 함수의 선언 (parameter에 관하여)

Chafle 2023. 3. 21. 20:27
반응형
기본적인 함수의 선언

 

addNumbers() { 

함수 작성

}

예시

void main() {

addNumbers();
}

addNumbers() {
  
  int x = 10;
  int y = 20;
  int z = 30;
  
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

 


paramter에 관하여 ..

함수를 외부에서 입력받아 처리하고 싶을 때 함수 이름 옆() 괄호 안에 있는 것을 파라미터라고 한다.

 

기본적으로 파라미터로 입력받아 로직을 처리한다.

함수이름 (파라미터1, 파라미터2)

 

 

 

함수의 파라미터에는

positional parameter

optional parameter

named parameter가 있다

 

positional parameter

 

void main() {

addNumbers(10, 20, 30); // 이 부분이 파라미터를 입력을 받고 함수를 호출하여 수행하는 부분.
  
}

addNumbers(int x, int y, int z) { // 이 부분이 파라미터를 설정.
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

파라미터의 순서가 곧 함수 내에서 파라미터로 수행되는 순서이기 때문에 positional parameter 라고 한다.

 

 


optional parameter

 

없어도 되는 파라미터에 대괄호를 넣어준다.

 

void main() {

addNumbers(10); // y와 z를 파라미터에 입력하지 않고 x인자만 들어갔다.
  
}

addNumbers(int x, [int? y, int? z]) { // 대괄호[]가 옵셔널 파라미터

  int sum = x + y + z; // 연산 시 숫자 + null + null <- 이런 연산은 에러가 난다.
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

1. 없어도 되는 파라미터, 곧 null값이 들어간다

2. null값이 들어가려면 int가 아닌  int?로 선언 되야 한다.

3. sum 연산 시 x + null + null로 되는데 숫자 + null 은 연산 법칙에 존재하지 않는다. 

 

해결방법

기본값을 지정해주자

 

 

void main() {

addNumbers(10);
  
}

addNumbers(int x, [int y = 20, int z = 30]) { //옵셔널 파라미터에 기본값 지정
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

위 처럼 파라미터에 기본값을 주게되면

 

y와 z를 생략해도 결과는 정상적으로 출력되게 돼있다.

 

 

만약 y와 z에 파라미터 입력을 하게 되면

void main() {

addNumbers(10, 50, 60); // y와 z에 파라미터 입력해줌.
}

addNumbers(int x, [int y = 20, int z = 30]) {
  
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

 

기본값은 무시되고 입력된 파라미터로 연산이 처리되게 된다.

 

 

 

 


 

named parameter

 

1.순서가 중요하지 않은 파라미터이다.

2. required가 붙는다.

 

 

 

예제로 설정하고 수행해보면

void main() {

addNumbers(x: 10, y: 20, z: 30); // 파라미터 당 :으로 값을 설정
  
}


addNumbers({ // 중괄호{} 사이에 requried로 파라미터 설정
  required int x,
  required int y,
  required int z
}) {
  
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

위와 같이 파라미터를 중괄호{} 사이에 required를 앞에 붙여서 선언해주고

함수에 가서 x: value, y: value, z: value에 넣어주면 함수가 실행 된다.

 

순서가 중요하지 않다는 것은

 x: value, y: value, z: value 의 값의 순서가 중요하지 않다는 것

 

즉,

void main() {

addNumbers(z: 30, y: 20,x: 10); // 파라미터 순서가 바뀜
  
}

addNumbers({
  required int x,
  required int y,
  required int z
}) {
  
  
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if( sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

순서가 바뀌어도 

 

 

출력은 동일하게 된다.

 

 

 


 

 

named parameter에서 optional parmeter를 사용할 수는 없는가?

 

 

required를 지우게 되면 optional parameter로 사용하게 되는 것이다.
반응형

'Flutter > Dart 문법' 카테고리의 다른 글

[Dart] Class의 getter와 setter  (0) 2023.03.22
[Dart] 생성자(constructor)  (0) 2023.03.22
[Dart] enum의 선언  (0) 2023.03.21
[Dart] while-if-break 문 / for-if-continue 문  (0) 2023.03.21
[Dart] While, Do-While loop  (0) 2023.03.21