
함수(Funciton)
특정한 작업을 수행하는 코드를 블록으로 만든 것. 일종의 모듈 이라고 이해하고 있다.
→ 입력에 따라 특정한 작업을 수행하고, 그 작업에 대한 결과를 반환하는 코드 블록
`반환 타입` `함수 이름` (`매개변수 타입` `매개변수 이름`) {return `반환값`}예시
// 예시1.
void printName() {
print("침착맨");
}
/*
반환타입: void -- 함수가 값을 반환하지 않는 경우 `void` 사용
함수이름: printName
매개변수: 없음
반환값: 없음
*/
// 예시2.
bool isOddNumber(int number) {
return number % 2 != 0;
}
/*
반환타입: bool -- true || false 값을 반환
함수이름: isOddNumber
매개변수 타입: int
매개변수 이름: number
반환값: number % 2 != 0;
*/
// 예시3.
bool isNull(int? number) {
return number == null;
}
/*
반환타입: bool
함수이름: isNull
매개변수 타입: int?
매개변수 이름: number
반환값: number == null
*/타입 추론을 활용한 축약형 함수 — 지양할 것
함수를 만들 때에도 타입추론이 가능하기 때문에
void나 bool, int 와 같은 타입을 작성하지 않더라도 동작하기는 한다. Dart 공식 문서에서는 이 방법은 추천하지 않으니, 지양할 것.printName() {
print("name");
}
isOddNumber(number) {
return number % 2 != 0;
}축약형 표현식 =>
반환값을 하나의 표현식으로 나타낼 수 있는 경우
=> 로 축약하여 표현 가능bool isOddNumber(int number) => number % 2 != 0;
int multiply(int a, int b) => a * b;호출
함수의 이름으로 호출할 수 있다.
void printName() {
print("name");
}
printName(); // namebool isOddNumber(int number) {
return number % 2 != 0;
}
void main () {
print(isOddNumber(3));
} // truevoid main() {
int add (int a, int b) => a + b;
int sum = add(2, 4);
print(sum);
} // 6제네릭 (Generics)
클래스나 함수에서 데이터 타입을 일반화하여 다양한 타입을 지원할 수 있게 하는 기능
`타입 파라미터` `함수이름`<`타입파라미터`>(`매개변수`) { ... }예시
T getFirstElement<T>(List<T> list) {
return list[0];
}타입 파라미터는 보통 영어 대문자 한 글자로 표현한다.
실제 코드를 실행할 때 타입 파라미터 자리에 실제 데이터 타입을 넣으면 된다.
타입에 의존하지 않고 여러 타입에 대해 동일한 코드를 적용할 수 있으므로 효율 좋은 코드!
int getFirstNumber(List<int> numbers) {
return numbers[0];
}
String getFirstWord(List<String> words) {
return words[0];
}
void main() {
var numbers = [0, 1, 2, 3];
print(getFirstNumber(numbers)); // 0
var words = ['a', 'b', 'c'];
print(getFirstWord(words)); // a
}이상의 코드를
T getFirstElement<T>(List<T> list) {
return list[0];
}
void main() {
var numbers = [0, 1, 2, 3];
print(getFirstElement(numbers)); // 0
var words = ['a', 'b', 'c'];
print(getFirstElement(words)); // a
}요렇게 쓸 수 있다는 것!
실습
이름을 매개변수로 전달 받아서 “안녕하세요, OO님”을 반환하는 함수를 만드세요.
trial 1. — fail : 반환값 없는 함수
void main() {
String hi(String name) {
print("안녕하세요, $name님");
}
print(hi("이카리 신지"));
}
/*
error : The body might complete normally, causing 'null' to be returned, but the return type, 'String', is a potentially non-nullable type.코드가 작동하지 않은 이유는: 본 코드에서 함수 Hi는 반환값을 갖지 않기 때문이다.
reture 반환값 의 구조 없이 print가 사용되어 반환값이 없는 코드인 셈.→
print를 유지하고 void를 사용하면 해결할 수 있을까? : trial 2 →
String을 유지하고 return을 사용하면 해결할 수 있을까? : trial 3 trial 2. void를 사용하여 반환값 없는 함수 생성
void main() {
void hi(var name) {
print("안녕하세요, $name님");
}
hi("이카리 신지");
}
// 안녕하세요, 이카리 신지님여기서 재미있었던 것은
hi라는 함수 자체에 print가 들어있기 때문에, print(hi(”이카리 신지”)); 가 아닌 hi;로 호출이 끝나버린다는 점이다.처음에는
print(hi("이카리 신지")); 를 계속 시도했는데 안 돼서; GPT에게 물어봤다.어떻게 보면 가장 깔끔한 구조일 듯.
trial 3. String을 유지하고 return을 사용
void main() {
String hi(var name) {
return "안녕하세요, $name님";
}
print(hi("아야나미 레이"));
}
// 안녕하세요, 아야나미 레이님
음- 이해한 것 같다.
Share article