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 |
Tags
- 크롤러
- variable
- 코틀린
- 클래스
- package
- Collection
- Yocto
- 파이썬
- text
- 콜렉션
- textstyle
- List
- import
- 웹크롤러
- pushnamed
- kotlin
- ML
- map
- function
- set
- DART
- Android
- Class
- animation
- 플러터
- 다트
- 함수
- python
- Flutter
- crawler
Archives
- Today
- Total
조용한 담장
Dart : Functions 본문
Dart Funciton
Function object
function 은 Function type 을 가지는 object 이다.
변수에 할당되거나 다른 함수의 인자가 될 수있다.
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
return type 이 생략될 수 있다.
=> expr
은 { return expr }
와 동일하다.
parameters
Mandatory parameter
mandatory parameter : @required
const Scrollbar({Key key, @required Widget child})
Optional parameter
named parameter : {paramName: value}
enableFlags(bold: true, hidden: false);
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}
positional parameter : []
String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;
}
// print(say('Bob')); // error
print(say('Bob', 'Howdy')); // Bob says Howdy
print(say('Bob', 'Howdy', 'smoke signal')); // Bob says Howdy with a smoke signal
Default parameter
named parameter 와 positional parameter 는 default value 를 가질 수 있다.
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold = false, bool hidden = false}) {...}
// bold will be true; hidden will be false.
enableFlags(bold: true);
void noFlags({int param}) {...}
// param is null
noFlags();
String say(String from, String msg,
[String device = 'carrier pigeon', String mood]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
if (mood != null) {
result = '$result (in a $mood mood)';
}
return result;
}
print(say('Bob', 'Howdy')); //Bob says Howdy with a carrier pigeon
list 와 map 도 default parameter 로 쓸 수 있다.
void doStuff(
{List<int> list = const [1, 2, 3],
Map<String, String> gifts = const {
'first': 'paper',
'second': 'cotton',
'third': 'leather'
}}) {
print('list: $list');
print('gifts: $gifts');
}
Main function
모든 앱은 entrypoint 가 되는 main() 을 가진다.
void main() {
}
void main(List<String> arguments) {
}
Cascade notation
...
은 동일한 오브젝트의 연속적인 동작을 표현할 때 쓸 수 있다. 오브젝트의 변수가 메소드등의 필드에도 접근할 수 있다.
잘 이용하면 코드의 양을 줄이고 시안성을 높일 수 있다.
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
//nested
final addressBook = (AddressBookBuilder()
..name = 'jenny'
..email = 'jenny@example.com'
..phone = (PhoneNumberBuilder()
..number = '415-555-0100'
..label = 'home')
.build())
.build();
Function as a parameter
function 을 다른 function 의 인자로 사용하거나 변수에 할당할 수 있다.
void printElement(int element) {
print(element);
}
var list = [1, 2, 3];
// Pass printElement as a parameter.
list.forEach(printElement);
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
print(loudify('hello')); // !!! HELLO !!!
Anonymous functions
이름없는 function 도 만들 수 있다.
([[Type] param1[, …]]) {
codeBlock;
};
var list = ['apples', 'bananas', 'oranges'];
list.forEach(
(item) {
print('${list.indexOf(item)}: $item');
}
);
list.forEach(
(item) => print('${list.indexOf(item)}: $item');
)
Lexical scope
bool topLevel = true;
void main() {
var insideMain = true;
void myFunction() {
var insideFunction = true;
void nestedFunction() {
var insideNestedFunction = true;
assert(topLevel);
assert(insideMain);
assert(insideFunction);
assert(insideNestedFunction);
}
}
}
nestedFunction() 는 상위에 정의된 변수에 접근 가능하다.
Lexical closures
/// Returns a function that adds [addBy] to the
/// function's argument.
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
void main() {
// Create a function that adds 2.
var add2 = makeAdder(2);
// Create a function that adds 4.
var add4 = makeAdder(4);
print(add2(3)); // 5
print(add4(3)); // 7
}
Return values
return 이 정의 되지 않으면 null 을 리턴한다.
foo() {}
foo(); // null
Reference
'Dart' 카테고리의 다른 글
Dart : Exceptions (0) | 2019.09.20 |
---|---|
Dart : Control flow statements (0) | 2019.09.17 |
Dart : Operators (0) | 2019.09.17 |
Dart 2.5 (0) | 2019.09.11 |
Dart : Variables (0) | 2019.08.05 |
Comments