Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Flutterハンズオン 2
Search
Aya Ebata
August 19, 2024
Technology
110
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
63
Flutterハンズオン 5
aya_ebata
0
100
JEP 480: Structured Concurrency
aya_ebata
0
300
Flutterハンズオン 4
aya_ebata
0
170
Flutterハンズオン 3
aya_ebata
0
110
Flutterハンズオン 1
aya_ebata
0
150
あたらしい もじれつの かきかた
aya_ebata
0
150
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
800
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
810
Other Decks in Technology
See All in Technology
サイバー捜査員研修(前半)
nomizone
1
1.9k
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
130
関東Kaggler会発表資料
takoi
1
200
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
380
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
モダンフロントエンド 開発研修
recruitengineers
PRO
4
580
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
550
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
1.6k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
240
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
470
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Building Applications with DynamoDB
mza
96
7.2k
Building an army of robots
kneath
306
46k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
The Language of Interfaces
destraynor
162
27k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
260
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Typedesign – Prime Four
hannesfritz
42
3.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
How to build a perfect <img>
jonoalderson
1
5.9k
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の変数や制御フロー文は直感的でわかりやすい - 関数の書き方が複数あり少し複雑