[Dart] #4 Function

Hwang gend·2023년 11월 5일
0

Dart

목록 보기
4/5

Function

dart는 특히 parameter가 특히 좋다고 한다.
(parameter는 함수에 전달해주는 매개변수)
문법적인 측면에서는 c, c++, java와 크게 다를바가 없다.

Fat arrow syntax

이건 만약 리턴 타입의 함수일 경우에

//원래 다른 언어에서 
String sayHello(String name){
	return "Hi, I'm $name ";
}
//Dart에서 Fat arrow syntax를 사용할 경우
String sayHello(String name)=>return "Hi, I'm $name ";

이런식으로 매우 간단하게 한 줄짜리의 리턴 타입의 함수를 사용해줄 수 있다.

Named Parameter

코드를 주고 설명을 해보자면

String sayHello({String name, int age, String country}){
	return "Hi, I'm $name, $age years old and live in $country .";
}
void main(){
	print(sayHello(
    	age: 23,
        country:'Korea',
        name: 'Hwang gend',
    ));
}

이와같이 순서와 상관없이 안에 선언해주면 된다.
※!!!대신에 함수를 선언할때 파라미터를 중괄호로 감싸줘야한다.
여기서 만약 파라미터 변수에 아무것도 사용자가 입력하지 않는 경우가 생길 수도 있다.
물론 이 코드에서는 그렇지 않지만 실제 어플이나 웹에서 그런 경우가 생기면 dart는
null safety때문에 알아서 null값을 넣지 않는다.
그걸 위해서 default값을 넣어주면 된다.(c++에서처럼)

String sayHello({String name, int age ='50', String country = 'Swiss'}){
	return "Hi, I'm $name, $age years old and live in $country .";
}
void main(){
	print(sayHello(
    	age: 입력받은 값이라고 가정,
        country:마찬가지,
        name: 'Hwang gend',
    ));
}

이런식으로 default값을 정해주면 문제가 발생치 않는다.

Required Modifier

위에서 설명했듯이 만약 사용자가 아무런 매개변수를 제공하지 않았다면

String sayHello({
	required String name,
    required int age,
    required String country,
    }){
	return "Hi, I'm $name, $age years old and live in $country .";
}

이런식으로 변수형 앞에 required라는 수식언을 넣어주면
애초에 main함수에서 사용자가 필요한 파라미터를 제공하지 않을때 오류가 발생한다.
즉, 파라미터가 꼭 필요함을 선언하는 것이다.

Optional Positional Parameter

명시적으로 파라미터를 받는 경우말고 한개만 따로 default값을 넣어주고 싶다면

String sayHello(
	String name, 
    int age, 
    [String? country = 'Korea']
)=>"Hi, I'm $name, $age years old and live in $country .";

void main(){
	print(sayHello('Hwang gend',23));
}

대괄호로 해당 변수를 감싸주고 ?를 넣어주면 전달 될 수도 있고 아닐 수도 있다는 것이다.
이 문법은 있다는 것 정도만 알면 될 것 같다.

QQ Operator

우선 아래의 코드와 같은 3항 연산자로도 충분히 가능한 구현이다.

String capitalizeName(String? name) =>
	name != null ? name.toUpperCase() : 'ANON';

만약 null값을 사용자가 보내왔다면 name != null이 false이므로 ANON이 return 될 것이고
그렇지 않다면 대문자로 변경된 name이 return 될 것이다.

이걸 만약에 QQ operator로 구현한다면?

String capitalizeName(String? name) =>
	name?.name.toUpperCase() ?? 'ANON';

name에 null이 들어올 수도 있으니 ?를 넣어주었고
??를 기준으로 좌가 true일때 return값
우측일 때는 false일때 return값이다.
이렇게 했을 경우에 main에서는 어떻게 전달하냐면

void main(){
	String? name;
    name ??= 'Hwang Gend';
}

이렇게 해주면 된다.
flutter를 할 때 자주 사용하게 된다고 하니 기억하는게 좋을 듯 하다.

Typedef

typedef는 자료형에 alias를 붙일 수 있게 해준다고 한다.
alias는 통로라는 뜻인 단어인데
실제 사용하는 코드를 보면 뭔지 감이 올 것이다.

typedef = UserName = String;
String sayHello(UserName name)=>return "Hi, I'm $name ";

특히 map같은 자료형을 사용할때 편할 듯 하다.

profile
화이팅~

0개의 댓글