Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Adapter
- 230508
- Flutter
- textContent
- 생명주기
- null-safety
- 230510
- parcelable
- html
- 프래그먼트
- 함수 인자
- classList
- C++
- 인텐트
- serializable
- javascript
- querySelector
- putextra
- 데이터 타입
- 230503
- intent
- 안드로이드
- 부가데이터
- Class
- ActionBar
- fragment
- ViewPager
- DFS
- string
- DOMContentLoaded
Archives
- Today
- Total
나만의 개발노트
[Dart] Functions (함수) 본문
1. 함수 정의 방법
//"Hello $name, nice to meet you." 를 String 타입으로 return하는 함수
String sayHello1(String name){
return "Hello $name, nice to meet you.";
}
//함수의 body에 return 식 밖에 없는 경우 가능
String sayHello2(String name) => "Hello $name, nice to meet you.";
void main(){
print(sayHello1("abc"));
}
- Parameter(매개변수) : 함수 안에서 정의 및 사용에 나열되어 있는 변수들 (여기서 String name)
2. Named Parameters
: function parameter에 순서 상관 없이 값을 넣게 할 수 있는 기능
[방법]
1. parameter 양쪽 끝에 { } 추가
2. 호출 시 "변수명 : 값" 입력
//position Parameters
String sayHello(String name, int age, String country){
return "Hello $name, you are $age, and come from $country.";
}
void main(){
//호출할 때, parameter 순서를 알고 있어야 함
print(sayHello('abc',20,'korea'));
}
------------------------------------------------
//Named Parameters, parameter에 {}중괄호 추가
String sayHello({String name, int age, String country}){
return "Hello $name, you are $age, and come from $country.";
}
void main(){
//순서가 바뀌어도 괜찮
print(sayHello(
name : 'abc',
country : 'korea',
age : 20
));
}
그런데, 그냥 이렇게 호출하면 Dart의 null-safety 기능으로 오류가 생김
=> parameter로 값을 다 전달하지 않으면(=미입력하면) null이 발생한다!!
[null이 발생하지 않게 하는 방법]
1. default 값 지정
//default값은 String name = 'abc' 이렇게 입력
String sayHello({String name = 'anno', int age = 99 , String country = 'anno'}){
return "Hello $name, you are $age, and come from $country.";
}
void main(){
//모든 값이 전달되지 않아도 됨 -> null일 경우 default값으로 설정됨
print(sayHello(
country : 'korea',
));
}
2. required 사용
//각 parameter 앞에 'required' 작성
String sayHello({required String name,required int age ,required String country}){
return "Hello $name, you are $age, and come from $country.";
}
void main(){
//required 표시된 값이 필수로 전달되지 않으면, 컴파일 오류 발생
print(sayHello(
country : 'korea',
));
}
3. QQ Operator
: ??(QQ) 는 만약 left값이 Null이라면 오른쪽 값을 return 한다는 operator
//이름을 대문자로 변경해주는 함수
String upperName(String name) => name.toUpperCase();
void main(){
upperName('abc');
upperName(null); //ERROR!- null은 toUpperCase()를 사용할 수 없다
}
해결방법1)
: parameter에 '?' 추가 후, if 조건문 사용
//'?'추가
String upperName(String? name){
//if문
if(name != null){
return name.toUpperCase();
}
return "NONE";
}
해결방법2)
: ' ? : ' 연산자 사용
//'? :' 연산자 사용
//name != null 이 true 이면, name.toUpperCase()하고, false이면, "NONE"을 return한다.
String upperName(String? name) => name != null ? name.toUpperCase() : "NONE";
해결방법3)
: '??' 연산자 사용
left ?? right - left가 null이면 right return, null이 아니면 left return
//'??' 연산자 사용
//name.toUpperCase()를 return하지만, name이 null인 경우 "NONE"를 return한다.
String upperName(String? name) => name?.toUpperCase() ?? "NONE";
[QQ equal]
: ' ??= ' 연산
left ??= right - left가 null이면, right 할당
void main(){
String? name;
//??= (QQ equal)연산자
//만약 name이 null인 경우 할당한다
name ??= "abc";
}
- flutter에서 자주 사용된다
4. Typedef
: 자료형에 alias(별명)을 붙여줄 수 있다
//자료형 List<int>의 별명을 ListOfInts로 정하겠다
typedef ListOfInts = List<int>;
void main(){
ListOfInts lists = [1,2,3,];
print(lists);
//output : [1,2,3]
}
'[Flutter] > [Dart]' 카테고리의 다른 글
[Dart] class2 - Cascade Notation / Enums (0) | 2024.07.16 |
---|---|
[Dart] Class 1 - Class / Constructor / Named Constructor (0) | 2024.07.15 |
[Dart] data type(데이터 타입) (0) | 2024.07.13 |
[Dart] Variables(변수) (1) | 2024.07.12 |