본문 바로가기
2023년 부터/Flutter

Dart - 함수와 제어문

by JeongUPark 2023. 10. 19.
반응형

함수의 본문이 한줄이라면 아래와 같이 화살표를 통하여 한줄로 만들어 줄 수 있다.

void testFunction() => print("test function");
  • 함수를 호출할 때는 매개변수의 개수와 타입 ,순서에 맞게 데이터를 전달해야한다. 그렇지 않으면 오류가 발생한다. 다만, 다크에서는 함수의 매개변수를 선택적으로 지원하느 옵셔널을 지원한다. (명명 매개변수, 옵셔널 위치 매개변수)
  • 명명 매개변수란 옵셔널이므로 호출할 때 데이터를 전달하지 않을 수도 있으며, ‘이름: 값; 형태로 매개변수 이름과 값을 함께 전달한다. 명명된 매개변수를 사용하려면 함수를 선언할 때 매개변수 타입과 이름을 중괄호로 묶어서 표현한다.
void some({String? data1}{
	print('data1: $data1');

 some(data1: 'world');
}
  • 명명된 매개변수 선언 규칙은 다음과 같다.
    • 명명된 매개변수는 중괄호{}로 묶어서 선언한다.
    • 여러 매개변수를 중괄호로 묶어 명명된 매개변수로 선언할 수 있다.
    • 한 함수에서 명명된 매개변수는 한번만 선언할 수 있으며 순서상 마지막에 선언해야한다.
    • 명명된 매개변수에는 기본값을 설정할 수 있다.
void some1({String? data2, bool? data3}, int data1) {} //오류 규칙 3번 
void some2(int data1, {String? data2 , bool? data3}, {int? data4}){} //오류 규칙 3번
void some3(int data1, {String? data2, bool? data3}){} 
  • 명명된 매개변수 호출 규칙
    • 명명된 매개변수 데이터를 전달하지 않을 수 있다.
    • 명명된 매개변수 데이터를 전달하려면 반드시 이름을 명시해야 한다.
    • 명명된 매개변수 데이터를 전달할 때는 선언된 순서와 맞추지 않아도 된다.
void some3(int data1, {String? data2, bool? data3}){} 

some(); //오류 명명되지 않은 매개변수 생략
some(10);
some(10, "hello", true); //오류 명명된 매개변수 이름 생략
some(10, data2: "hello", data3: true);
some(10, data3: true, data2: "hello");
some(data2: "hello", 10, data3: true);
  • 명명된 매개변수는 기본 인자를 설정할 수 있다.
String test({String data = "hello"}){
	return data;
}

main(){
	print('test result: ${test()}'); // hello
	print('test result: ${test(data: "world")}'); // world
}
  • 명명된 매개변수 중 필수 매개변수를 required를 통하여 선언할 수 있다.
String test({required String data = "hello"}){
	return data;
}

main(){
	print('test result: ${test()}'); // 오류
	print('test result: ${test(data: "world")}'); 
}
  • 옵셔널 위치 매개변수는 명명된 매개변수처럼 값은 선택이므로 전달받지 않을 수 있지만, 전달 할때 이름대신 순서에 맞게 호출해 주어야한다.
void some([String name = "hello", int age = 10]){
	print("name: $name , age: $age");
	some("world", 20);
}
  • 옵셔널 위치 매개변수의 선언 규칙은 아래와 같다.
    • 매개변수들을 대괄호로 묶는다
    • 함수의 마지막 매개변수에만 사용할 수 있다.
    • 매개변수에 기본 인자를 설정할 수 있디.
  • 옵셔널 위치 매개변수의 호출 규칙은 아래와 같다.
    • 매개변수 이름은 생략한다
    • 매개변수가 선언된 순서에 따라 값이 할당된다.
void some(int age1, [String age2 = 'hello', bool age3 = false]{}

some(); // 오류 명명되지 않은 매개변수 생략
some(10); 
some(10, age2: 'world', age3: true); // 오류 , 매개변수 이름을 생략하지 않음
some(10, 'world', true);
some(10, true, 'world'); // 오류 순서를 지키지 않음
some(10, 'world'); 
soem(10, true);
  • 다트는 모든 타입이 객체이므로 함수도 객체이다. 그래서 함수를 대입할 수 있는 개체를 함수 타입이라하고 Function으로 선언한다.
  • Function 타입으로 선언한 변수에 모든 함수를 대입할 수 있지만, 대힙할 함수를 특정한 형태로 한정 지을 수도 있다
int some(int f(int a)){
	return f(30);
}

main(){
	some((int a){
		return a+ 20
	}
}
  • 함수의 이름이 생략된 익명함수라는 것이 있는데, 흔히 람다 함수라 부른다.
Function fun2 = (arg) {
	return 10;
}
  • getter& setter. 여기서 중요한 점은 get과 set 예약어가 같다는 점입니다. 또한 get이나 set 하나만 설정해줄 수도 있습니다.
String _name ="hello";

String get name {
	return _name.toUpperCase();
}

set name(value){
	_name = value
}
  • .. 혹은 ?.. 연산자는 같은 객체를 반복해서 접근할 때 편리하게 사용할 수 있다.
class User{
	String? name;
	int age;
	
	some(){
		print("$name, $age");
}

//위와 같은 클래스가 있으면 

var user = User();
user.name = "Park";
user.age = 30;
user.some();

//또는

var user = User();
user
	..name = "Park"
  ..age = 30
	..some();

//으로 선언 가능하다.
반응형

'2023년 부터 > Flutter' 카테고리의 다른 글

Dart - 믹스인(mixin)  (0) 2023.10.19
Dart - 클래스와 객체  (0) 2023.10.19
Dart - 널 안정성  (0) 2023.10.19
Dart - 데이터 타입  (0) 2023.10.19
Dart 언어란?  (0) 2023.10.19