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
75
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
110
Flutterハンズオン 1
aya_ebata
0
150
あたらしい もじれつの かきかた
aya_ebata
0
150
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
810
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
820
Other Decks in Technology
See All in Technology
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
10
4.9k
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
370
Making AI Agents Safe and Fast- Jev, Obsidian, and the Meta-Harness
x5gtrn
PRO
0
110
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
160
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
250
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
540
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
630
Antigravity SDK for the Java Developer
glaforge
0
170
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
150
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
490
AI de Idea
kawaguti
PRO
2
130
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
190
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
A Modern Web Designer's Workflow
chriscoyier
699
190k
A Tale of Four Properties
chriscoyier
163
24k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Designing for humans not robots
tammielis
254
26k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Site-Speed That Sticks
csswizardry
13
1.5k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
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の変数や制御フロー文は直感的でわかりやすい - 関数の書き方が複数あり少し複雑