함수
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합입니다.
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 |