7. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
1) ์ผ๊ธ ๊ฐ์ฒด
- first-class object(์ผ๊ธ ๊ฐ์ฒด): ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ, ์์ , ๋ณ์์ ๋์ ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด
- Dart์์ ํจ์๋ฅผ ํํํ ์ ์๋ ๊ฒ๋ค(๋๋ค์, ์ต๋ช ํจ์, ๋ฉ์๋)์ ๋ชจ๋ ๊ฐ์ ์ทจ๊ธ ๊ฐ๋ฅ
void greeting(String text) {
print(text);
}
void main() {
var f = greeting; // ํจ์, ๋ค๋ฆ ๋ณ์์ ๋์ ๊ฐ๋ฅ
f('hello');
}
// ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ํจ์ ์์ฒด๋ฅผ ์ ๋ฌ or ๋ฐํ ๊ฐ๋ฅ
void something(Function(int i) f) {
f(10);
}
// case1
void main() {
something((value) {
print(value);
});
}
// case2
void myPrintFunction(int i) {
print('์์ $i');
}
void main() {
something((i) => myPrintFunction(i)); // ์์ 10
something((i) => print(i)); // 10
2) for ๋ฌธ๊ณผ forEach() ํจ์
- forEach(): ๋ด๋ถ ๋ฐ๋ณต (vs for(): ์ธ๋ถ ๋ฐ๋ณต)
- (E element) {} ํํ์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์(E๋ ๋ชจ๋ ํ์ ์ด ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ)
final items = [1, 2, 3, 4, 5];
items.forEach(print); // 1, 2, 3, 4, 5
// ์ต๋ช ํจ์
items.forEach((e) {
print(e);
});
// ๋๋ค์
items.forEach((e) => print(e)); // e: items์ ๊ฐ ์์๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ฐ๋ณตํ๋ฉด์ ํ๋์ฉ ๋ค์ด์ฌ ์ธ์, ์ด๊ฒ์ print ํจ์์ ์ ๋ฌํ๋ค๋ ์๋ฏธ
3) where
- where(): ์กฐ๊ฑด์ ํํฐ๋งํ ๋ ์ฌ์ฉํ๋ ํจ์
final items = [1, 2, 3, 4, 5];
for (var i = 0; i < items.length; i++) {
if(items[i] % 2 == 0) {
print(items[i]); // 2, 4
}
}
-------------------------------------------------------
// where() ์ฌ์ฉ
items.where((e) => e % 2 == 0).forEach(print); // 2, 4
4) map
- map(): ๋ฐ๋ณต๋๋ ๊ฐ์ ๋ค๋ฅธ ํํ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ ์ ๊ณตํ๋ ํจ์
final items = [1, 2, 3, 4, 5];
for (var i = 0; i < items.length; i++) {
if(items[i] % 2 == 0) {
print('์ซ์ $items[i]'); // ์ซ์ 2, ์ซ์ 4
}
}
--------------------------------------------------------------------------------------
// map() ์ฌ์ฉ
items.where((e) => e % 2 == 0).map((e) => '์ซ์ $e').forEach(print); // ์ซ์ 2, ์ซ์ 4
5) toList
- Dart์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ํจ์ ๋๋ถ๋ถ์ Interble<T>๋ผ๋ ์ธํฐํ์ด์ค ํ์ ์ธ์คํด์ค ๋ฐํ -> ์ค์ฌ์ฉ์ ๋ฆฌ์คํธ๋ก ๋ณํํด์ผํ๋ ๊ฒฝ์ฐ ๋ค์
final result = items.where((e) => e % 2 == 0).toList();
6) toSet
- toSet(): ๋ฆฌ์คํธ ์ค๋ณต ์ ๊ฑฐ ํจ์
final result = items.where((e) => e % 2 == 0).toSet().toList();
7) any
- any(): ๋ฆฌ์คํธ์ ํน์ ์กฐ๊ฑด ์ถฉ์กฑํ๋ ์์ ์๋์ง ๊ฒ์ฌํ ๋ ์ฌ์ฉํ๋ ํจ์
print(items.any((e) => e % 2 == 0)); // true
8) reduce
- reduce(): ๋ฐ๋ณต ์์ ์ค์ฌ๊ฐ๋ฉด์ ๊ฒฐ๊ณผ ๋ง๋ค ๋ ์ฌ์ฉ ํจ์
- [ํ์ ]([ํ์ ] value, [ํ์ ] element) ํํ๋ก ์ ์ -> ํญ์ ๋ ์ธ์๋ฅผ ๋ฐ๊ณ , ๋ฐํ๊ฐ์ ์ธ์์ ๊ฐ์ ํ์ ์ด์ฌ์ผ ํจ
import 'dart:math';
final items = [1, 2, 3, 4, 5];
var maxResult = items[0];
for (var i = 1; i < items.length; i++) {
maxResult = max(items[i], maxResult);
}
print(maxResult); // 5
----------------------------------------------
final items = [1, 2, 3, 4, 5];
print(items.reduce((e,v) => max(e,v))); // 5
8. ๊ธฐํ ์ ์ฉํ ๋ฌธ๋ฒ
1) ๊ณ๋จ์ ํ๊ธฐ๋ฒ(cascade natation) .. ์ฐ์ฐ์
- ..์ฐ์ฐ์: ๋ฉ์๋๋ฅผ ์ํํ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ฐํ
final items = [1,2,3,4,5];
var result = items;
result.add(6);
result.remove(2);
print(result); // 1, 3, 4, 5, 6
-----------------------------------
print(items
..add(6)
..remove(2)); // 1, 3, 4, 5, 6
2) ์ปฌ๋ ์ if
bool promoActive = false;
if (promoActive) {
print([1,2,3,4,5,6]);
} else {
print([1,2,3,4,5]);
}
-------------------------------------
bool promoActive = true;
print([1,2,3,4,5, if (promoActive) 6]); // 1, 2, 3, 4, 5, 6
3) ์ปฌ๋ ์ for
var listOfInts = [1,2,3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
listOfStrings.forEach(print); // #0, #1, #2, #3
4) null ์ฒ๋ฆฌ์ ๊ดํ ๊ธฐ๋ฅ
- null์ ์๋ฌ๋ฅผ ์ ๋ฐํ๊ธฐ ์ฌ์ -> ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์์ if๋ฌธ์ ์ฌ์ฉํ์ฌ null์ธ์ง ์๋์ง ๊ฒ์ฌ
if (name != null){
print(name.length);
}
- ?.์ฐ์ฐ์: Dart์์ ์ ๊ณต, ๊ฐ์ฒด๊ฐ null์ผ ๋ ์๋ฅผ ๋ฐ์ํ๋ ๋์ null ๋ฐํ
print(name?.length); // null ์ถ๋ ฅ
- ??์ฐ์ฐ์: ๊ฐ์ฒด๊ฐ null์ผ ๋ ์๋์ ๊ฐ๋จํ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ
if (name != null) {
print(name.length);
} else {
print(0);
}
----------------------------------------------------
print(name?.length ?? 0); // name์ด null ์ด๋ฉด 0์ ์ถ๋ ฅ
'Frontend ๐ > Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Flutter]๋ ์ด์์ ํํ ๋ฆฌ์ผ_(2) (0) | 2022.02.18 |
---|---|
[Flutter]๋ ์ด์์ ํํ ๋ฆฌ์ผ (0) | 2022.02.17 |
[Dart] Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ_(2) (0) | 2022.02.11 |
[Dart] Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ_(1) (0) | 2022.02.11 |
[Flutter] Window์ Flutter ์ค์นํ๊ธฐ (0) | 2022.02.10 |