Flutter

Dart 문법 - 함수

whs5758 2025. 8. 18. 17:45

함수

하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합입니다. 

void main() {
  // Dart 함수
  // 문제 1 - 원에 면적 구하는 함수를 설계하세요
  // 반지름 값은 5.0
  print(calculateCircleArea(5.0));

  // 문제 2 - 직사각형의 면적을 구하는 함수를 설계하세요
  // 가로 길이 3.0, 세로 길이 4.0
  print(calculateRectangleArea(3.0, 4.0));
}

// 문제 1번 함수를 완성 하시오
double calculateCircleArea(double r) {
  // 3.14 * 반지름 * 반지름
  return 3.14 * r * r;
}

// 문제 2번 함수를 완성 하시오
double calculateRectangleArea(double a, double b) {
  // 가로 * 세로
  return a * b;
}

 

익명함수와 람다식 

익명함수와 람다식의 가장 큰 차이는 람다식에서는 return 키워드를 적지 않아도 값이 반환되지만 익명함수는 값을 반환하려면 return 키워드를 꼭 적어야 합니다. 

void main() {
  // Dart - 익명 함수

  // 1단계 - 이름이 없는 함수 (선언을 하더라도 사용할 방법이 없다.)
  // --- dart 언어는 익명 함수를 변수에 담을 수 있다.
  var a = (int number) {
    return 100 + number;
  };

  print(a); // 함수 자체를 출력하는 문법
  print(a(10)); // 함수를 호출. 즉, 실행 시키는 방법은 괄호 사용
  print(a.runtimeType);

  // dart 언어는 일급 객체(first class citizen)를 지원 합니다.
  // 자바에서는 일급 객체(first class citizen)를 부분적으로 지원
  // 자바에서 함수를 변수에 담을 수 X
  // dart는 매개변수 안에 함수를 선언할 수 있다.

  // 2단계
  int Function(int) b = (int number) {
    return number * number;
  };

  int Function(int, int) c = (int number1, int number2) {
    return number1 * number2;
  };

  // return 타입 생략 가능
  Function(int, int, double) d = (int number1, int number2, double d3) {
    return number1 * number2 * d3;
  };

  var e = (int number1, int number2, double d3, double d4) {
    return number1 * number2 * d3 * d4;
  };

  // 3단계
  // dart 는 파라미터 타입을 생략 시킬 수 있다.
  Function sub = (a, b) {
    return a * b;
  };
  var sum1 = sub(1.1, 2);
  print(sum1);

  // 4단계
  var multiply = (a, b) {
    return a * b;
  };
  print(multiply(2, 8));

  // 5단계 함수의 인수값으로 함수를 전달 받을 수 있다.
  performOperation(10, 5, add);
  performOperation(10, 5, multiply2);
}

/**
 * (매개변수) {
 *  수행구문
 *  }
 */

// 전달될 함수들 선언
int add(int a, int b) {
  return a + b;
}

int multiply2(int a, int b) {
  return a * b;
}

// 매개 변수로 함수를 받는 함수 선언
void performOperation(int a, int b, int Function(int, int) operation) {
  print(operation(a, b));
}
void main() {
  // 화살표 함수 dart 2.7 버전 이후부터 제공
  // 화살표 함수는 간단한 함수를 더 간결하게 표현할 수 있는 표현식

  List<String> footballplayers = ['메시', '손흥민', '김민재', '이강인'];

  footballplayers.forEach((e) {
    print(e);
  });
  print("======================================");
  footballplayers.forEach((e) => print('축구선수 : ${e}'));
}

/**
 * int add (int a, int b) {
 * return a + b;
 * }
 *
 * int addArrow(int a, int b) => a + b;
 */

// 기존 함수 정의
int add1(int n1, int n2) {
  return n1 + n2;
}

int sub1(int n1, int n2) {
  return n1 - n2;
}

double div1(int n1, int n2) {
  return n1 / n2;
}

// 2 위 함수를 람다식으로 변경해보자
int add(int n1, int n2) => n1 + n2;
int sub(int n1, int n2) => n1 - n2;
double div(int n1, int n2) => n1 / n2;

// 람다식의 단점
// 아래 함수처럼 분기 및 복잡한 함수는 람다식을 사용하기 어렵다.
// 이 경우에는 기존의 방식대로 함수의 body 에 정의하는 것이 타당하다.
int subsract(int a, int b) {
  if (a > b) {
    return a - b;
  } else {
    return a - b;
  }
}

 

 

'Flutter' 카테고리의 다른 글

Dart 문법 - dart null Safety  (3) 2025.08.18
Dart 문법 - 클래스  (2) 2025.08.18
Dart 문법 - 조건문  (1) 2025.08.13
Dart 문법 - 연산자  (2) 2025.08.13
Dart 문법 - Dart 변수  (3) 2025.07.28