Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Flutterハンズオン 2
Search
Aya Ebata
August 19, 2024
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Flutterハンズオン 2
Aya Ebata
August 19, 2024
More Decks by Aya Ebata
See All by Aya Ebata
JEP 526: Lazy Constants
aya_ebata
0
99
Flutterハンズオン 5
aya_ebata
0
110
JEP 480: Structured Concurrency
aya_ebata
0
300
Flutterハンズオン 4
aya_ebata
0
180
Flutterハンズオン 3
aya_ebata
0
120
Flutterハンズオン 1
aya_ebata
0
150
あたらしい もじれつの かきかた
aya_ebata
0
160
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
810
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
830
Other Decks in Technology
See All in Technology
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
290
継続的なAIコスト最適化
bgpat
1
340
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.8k
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
Agile that works and the tools we love
rasmusluckow
331
22k
A designer walks into a library…
pauljervisheath
211
25k
エンジニアに許された特別な時間の終わり
watany
109
250k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Making Projects Easy
brettharned
120
6.8k
The Pragmatic Product Professional
lauravandoore
37
7.5k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Transcript
Flutterハンズオン 2 2024/08/20 社内勉強会 えばた あや
今日話すこと 1. Dartとは? 2. Dartの基礎構文 前半 - 変数 - 制御フロー文
- 関数 - ★練習問題
1. Dartとは?
Dartとは - Googleによって開発された言語 - あらゆるプラットフォームで高速なアプリケーションを開発するために 最適化された言語 - オブジェクト指向、クラスベース、ガベージコレクションを備えた、 Cスタイルの構文を持つ -
ネイティブコードまたはJavaScriptにコンパイルできる
Dartとは - JavaScriptの代替となることを目的に作られた - 型は必須だけど、型推論 -> 型安全 - nullを許可しない限り、値はnullにできない ->
null安全
2. Dartの基礎構文 前半
Dartの基礎構文 手元で試しながら学んでいきましょう〜! DartPad https://dartpad.dev/ ご自身で入れたエディタでもOK!
Dartの基礎構文 こちらのページに載っている構文を見ていきます! https://dart.dev/language
Hello World - main関数から実行される - print関数を使う void main() { print('Hello,
World!'); }
変数 - 変数はvarで宣言できる - この場合、型推論になる - シングルクォーテーションが標準 var name =
'Voyager I'; var year = 1977; var antennaDiameter = 3.7;
変数 - ListやMapは感覚的にかける var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = { 'tags': ['saturn'], 'url': '//path/to/saturn.jpg' };
変数 - 型を明示的に書くこともできる - Object型は型の制限がない場合に使用 String name = 'Bob'; Object
name = 'Bob';
変数 - 型の後ろに?を追加するとnullableになる String? name; print(name); // nullが出力される String name
= null; // エラーになる
変数 - intで宣言をした後に数値を入れないと怒られる - non-nullableのため int num; num = 2;
print(num);
late - 遅延初期化 - 変数の宣言後に初期化される late String description; void main()
{ description = 'Feijoada!'; // ここでdescriptionを初期化 print(description); }
late - 宣言時に初期値を書くことができる - 変数が使用されない場合は初期化されない late String temperature = readThermometer();
final - 変数を変更する予定がない場合 - 実行時に値を確定する final name = 'Bob'; //
Without a type annotation final String nickname = 'Bobby';
定数 - constを使用する - 値の変更はできない - コンパイル時に値を確定する const bar =
1000000; // Unit of pressure (dynes/cm2) const double atm = 1.01325 * bar; // Standard atmosphere
if if (year >= 2001) { print('21st century'); } else
if (year >= 1901) { print('20th century'); }
for for (var i = 1; i <= 10; i++)
{ print(i); } var collections = [1, 2, 3]; for (final collection in collections) { print(collection); }
forEach var collection = [1, 2, 3]; collection.forEach((val) => print(val));
// 1 2 3 // 以下は省略した書き方 collection.forEach(print);
while while (year < 2016) { year += 1; }
練習問題1 import 'dart:math'; void main() { // 1. Stringのresult変数を定義する //
以下はtrue/falseをランダムに生成するメソッド var random = Random().nextBool(); // 2. もしrandom変数がtrueならresult変数に「結果はtrueです」を // 入れ、falseなら「結果はfalseです」を入れる // 3. result変数を出力する }
練習問題1 解答例 import 'dart:math'; void main() { String result; var random
= Random().nextBool(); if (random) { result = '結果はtrueです'; } else { result = '結果はfalseです'; } print(result); }
関数 - 戻り値の型は関数名の頭にて指定できる - 戻り値の型は省略可能だが、公式は指定することを勧めている int fibonacci(int n) { if
(n == 0 || n == 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); } var result = fibonacci(20);
関数の短縮構文 - 処理が1行しかない関数の場合は書き方を省略できる bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
名前付き引数 - {}を使って指定することで、関数呼び出し時に引数名を指定できる - 引数に何も指定しない場合はオプショナルになるので?が必要 void enableFlags({bool? bold, bool? hidden})
{...} enableFlags(bold: true, hidden: false); enableFlags(bold: true); // hiddenはnullになる
名前付き引数 - 引数にデフォルト値を指定できる - その場合は何かしら値が入るのでnon-nullableになる void enableFlags({bool bold = false,
bool hidden = false}) { … } enableFlags(bold: true); // hiddenにはfalseが入る
名前付き引数 - requiredをつけると関数呼び出し時に名前付き引数での呼び出しが必須 になる void enableFlags( {required bool bold, required
bool hidden} ) {...} enableFlags(bold: true, hidden: false); enableFlags(bold: true); // hiddenがないので怒られる
名前付き引数 - requiredと?を使用することで名前付き引数が必須でnullを許可できる void enableFlags( {required bool? bold, required bool?
hidden} ) {...} enableFlags(bold: null, hidden: null);
Optional positional parameters - []で囲むとオプショナルな引数になる String say(String from, String msg,
[String? device]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } return result; } say('Bob', 'Howdy'); // 「Bob says Howdy」が返却される say('Bob', 'Howdy', 'smoke signal'); // 「Bob says Howdy with a smoke signal」が返却される
第一級オブジェクト - 関数を別の関数のパラメータとして渡すことができる void printElement(int element) { print(element); } var
list = [1, 2, 3]; list.forEach(printElement); // 以下と同じ意味になる list.forEach((val) => printElement(val));
無名関数 - 以下でいうと、mapの中身が無名関数 const list = ['apples', 'bananas', 'oranges']; var
uppercaseList = list.map((item) { return item.toUpperCase(); }).toList();
無名関数 - 処理が1つしかない場合は、=>でreturnを省略できる ※ 文字列に変数やメソッドを埋め込む際は$を使用する var uppercaseList = list .map((item)
=> item.toUpperCase()) .toList(); uppercaseList.forEach( (item) => print('$item: ${item.length}') );
複数の値を返す関数 - カッコで指定する (String, int) foo() { return ('something', 42);
}
練習問題2 - 関数を使って、lateが遅延初期化していることを確認する String getOrder() { // 1. 「注文が入りました」と出力する //
2. 「ラーメン」を返却する } void main() { // 3. late変数orderを定義、初期値はgetOrder関数を指定 // 4. order変数を出力する }
練習問題2 解答例 - 関数を使って、lateが遅延初期化していることを確認する String getOrder() { print('注文が入りました'); return 'ラーメン'; }
void main() { late var order = getOrder(); print(order); }
練習問題2 遅延初期化の確認 - 関数を使って、lateが遅延初期化していることを確認する void main() { // 1. lateを削除して実行 ->
出力されるものを確認 late var order = getOrder(); // 2. 以下をコメントアウトして実行 -> 出力されるものを確認 print(order); // 3. order変数にまたlateをつけて実行 -> 出力されるものを確認 }
練習問題3 // 1. 以下の条件を持つ、intを返却するadd関数を作成する // - 名前付き引数 // - intの引数first、関数を呼び出す際に指定必須
// - intの引数second、nullable // - intの引数third、デフォルト値が10 // - first、second、thirdを足した数を返却する
練習問題3 void main() { // 2. 以下がエラーなく実行できることを確認する print(add(first: 1, second:
2, third: 3)); print(add(first: 1, second: 2)); print(add(first: 1)); }
練習問題3 解答例 int add({required int first, int? second, int third =
10}) { return first + (second != null ? second : 0) + third; }
練習問題3 解答例 void main() { print(add(first: 1, second: 2, third: 3));
// 6 print(add(first: 1, second: 2)); // 13 print(add(first: 1)); // 11 }
練習問題4 // 1. 以下を満たす関数を作成する void main() { ramen('硬め', '濃いめ', '多め');
// 「麺: 硬め, 味: 濃いめ, 油: 多め」が出力される ramen(); // 「麺: 普通, 味: 普通, 油: 普通」が出力される }
練習問題4 解答例 void ramen([ String noodle = '普通', String taste =
'普通', String oil = '普通' ]) { print('麺: $noodle, 味: $taste, 油: $oil')); }
練習問題5 void main() { // 1. 好きな数値を羅列したList型のlist定数を定義する // 2. 無名関数を用いてlistの各値に10を掛けた値を出力する
}
練習問題5 解答例1 - 10を掛けた値を毎回出力する例 void main() { const list = [1,
2, 3]; list.forEach((item) => print(item * 10)); }
練習問題5 解答例2 - 10を掛けたListを作成し、最後に出力をする例 void main() { const list = [1,
2, 3]; var addedList = list.map((item) => item * 10).toList(); print(addedList); }
まとめ - Dartの変数や制御フロー文は直感的でわかりやすい - 関数の書き方が複数あり少し複雑