Submit Search
Upload
リーダブルコード 1.0'
•
Download as PPTX, PDF
•
3 likes
•
2,962 views
Y
Yamamura Takashi
Follow
以前作ったスライドを、作り替えてみました。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 46
Download now
Recommended
リーダブルコード
リーダブルコード
Keita Otsuka
リーダブルコード勉強会
リーダブルコード勉強会
norimatsu2012
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
Kouhei Sutou
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめました
Takumi Sato
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
リーダブルコードを読んだ後
リーダブルコードを読んだ後
Kouhei Sutou
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
Kouhei Sutou
リーダブルコード勉強会
リーダブルコード勉強会
TAKUYA YAMAMOTO
Recommended
リーダブルコード
リーダブルコード
Keita Otsuka
リーダブルコード勉強会
リーダブルコード勉強会
norimatsu2012
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
Kouhei Sutou
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめました
Takumi Sato
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
リーダブルコードを読んだ後
リーダブルコードを読んだ後
Kouhei Sutou
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
Kouhei Sutou
リーダブルコード勉強会
リーダブルコード勉強会
TAKUYA YAMAMOTO
Benkyokai
Benkyokai
sueki1242
良いコードとは
良いコードとは
Nobuyuki Matsui
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」
Hiromu Shioya
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
amusementcreators
JVMの中身を可視化してみた
JVMの中身を可視化してみた
Kengo Toda
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
Kiyoshi Sawada
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
Toshihiro Nakamura
PHP+DB
PHP+DB
Sawada Makoto
Mobile programming seigyokoubun
Mobile programming seigyokoubun
Yuichiro Takahashi
できる!Pmdカスタマイズ
できる!Pmdカスタマイズ
Satoshi Kubo
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
Yohei Hamada
Codevs++++
Codevs++++
昴 近藤
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
フォントのホント
フォントのホント
Tadahisa Motooka
メタプログラミングってなに?
メタプログラミングってなに?
KazukiWata
使い捨て python コードの書き方
使い捨て python コードの書き方
Sho Shimauchi
#027 tddのさわり
#027 tddのさわり
森下 智裕
設計してますか?
設計してますか?
ke-m kamekoopa
Vagrant
Vagrant
Hiroshi Toyama
Fluentd勉強会 (導入編 TreasureData活用)
Fluentd勉強会 (導入編 TreasureData活用)
takeuchi-tk
More Related Content
What's hot
Benkyokai
Benkyokai
sueki1242
良いコードとは
良いコードとは
Nobuyuki Matsui
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」
Hiromu Shioya
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
amusementcreators
JVMの中身を可視化してみた
JVMの中身を可視化してみた
Kengo Toda
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
Kiyoshi Sawada
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
Toshihiro Nakamura
PHP+DB
PHP+DB
Sawada Makoto
Mobile programming seigyokoubun
Mobile programming seigyokoubun
Yuichiro Takahashi
できる!Pmdカスタマイズ
できる!Pmdカスタマイズ
Satoshi Kubo
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
Yohei Hamada
Codevs++++
Codevs++++
昴 近藤
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
フォントのホント
フォントのホント
Tadahisa Motooka
メタプログラミングってなに?
メタプログラミングってなに?
KazukiWata
使い捨て python コードの書き方
使い捨て python コードの書き方
Sho Shimauchi
#027 tddのさわり
#027 tddのさわり
森下 智裕
設計してますか?
設計してますか?
ke-m kamekoopa
What's hot
(20)
Benkyokai
Benkyokai
良いコードとは
良いコードとは
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
JVMの中身を可視化してみた
JVMの中身を可視化してみた
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
PHP+DB
PHP+DB
Mobile programming seigyokoubun
Mobile programming seigyokoubun
できる!Pmdカスタマイズ
できる!Pmdカスタマイズ
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
Codevs++++
Codevs++++
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
フォントのホント
フォントのホント
メタプログラミングってなに?
メタプログラミングってなに?
使い捨て python コードの書き方
使い捨て python コードの書き方
#027 tddのさわり
#027 tddのさわり
設計してますか?
設計してますか?
Viewers also liked
Vagrant
Vagrant
Hiroshi Toyama
Fluentd勉強会 (導入編 TreasureData活用)
Fluentd勉強会 (導入編 TreasureData活用)
takeuchi-tk
Fluentd
Fluentd
Hiroshi Toyama
仮想マシンとVagrant + Vagrant 1.5
仮想マシンとVagrant + Vagrant 1.5
Daisuke Kikuchi
Ipros techmeetup 20131218_scala_handson
Ipros techmeetup 20131218_scala_handson
honda-y
Fluentd introduction at ipros
Fluentd introduction at ipros
Treasure Data, Inc.
戦国時代を生きた「黒田官兵衛」とWeb時代を生きる「エンジニア」
戦国時代を生きた「黒田官兵衛」とWeb時代を生きる「エンジニア」
Junya Yamaguchi
インフラエンジニアLv1がWordPressまわりに色々してみた話
インフラエンジニアLv1がWordPressまわりに色々してみた話
Daisuke Kikuchi
CSS Nite LP38に行ってきた
CSS Nite LP38に行ってきた
Yasuyuki Fujikawa
MBaaS - Parse
MBaaS - Parse
Junya Yamaguchi
Hubotを使ってbotをつくろう!
Hubotを使ってbotをつくろう!
Daisuke Kikuchi
初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発
Daisuke Kikuchi
Vagrant勉強会アップロード用
Vagrant勉強会アップロード用
takeuchi-tk
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
Daisuke Kikuchi
Fluentdで本番環境を再現
Fluentdで本番環境を再現
Hiroshi Toyama
Enjoy the Ansible
Enjoy the Ansible
Yasuyuki Fujikawa
Markdownでドキュメント作成
Markdownでドキュメント作成
Yasuyuki Fujikawa
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
takeuchi-tk
Re:dash Use Cases at iPROS
Re:dash Use Cases at iPROS
Jumpei Yokota
Viewers also liked
(20)
Vagrant
Vagrant
Fluentd勉強会 (導入編 TreasureData活用)
Fluentd勉強会 (導入編 TreasureData活用)
Fluentd
Fluentd
仮想マシンとVagrant + Vagrant 1.5
仮想マシンとVagrant + Vagrant 1.5
Ipros techmeetup 20131218_scala_handson
Ipros techmeetup 20131218_scala_handson
Fluentd introduction at ipros
Fluentd introduction at ipros
戦国時代を生きた「黒田官兵衛」とWeb時代を生きる「エンジニア」
戦国時代を生きた「黒田官兵衛」とWeb時代を生きる「エンジニア」
インフラエンジニアLv1がWordPressまわりに色々してみた話
インフラエンジニアLv1がWordPressまわりに色々してみた話
CSS Nite LP38に行ってきた
CSS Nite LP38に行ってきた
MBaaS - Parse
MBaaS - Parse
Hubotを使ってbotをつくろう!
Hubotを使ってbotをつくろう!
初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発
Vagrant勉強会アップロード用
Vagrant勉強会アップロード用
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
Fluentdで本番環境を再現
Fluentdで本番環境を再現
Enjoy the Ansible
Enjoy the Ansible
Markdownでドキュメント作成
Markdownでドキュメント作成
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
Re:dash Use Cases at iPROS
Re:dash Use Cases at iPROS
Similar to リーダブルコード 1.0'
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
Start!! Ruby
Start!! Ruby
mitim
可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)
tak
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
リーダブルコード
リーダブルコード
GIG inc.
「いいコード」をみんなで書こう!
「いいコード」をみんなで書こう!
tq_ed
一人でも出来るコードリーディング
一人でも出来るコードリーディング
Taiyo Akashi
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
プログラミング勉強会 その0
プログラミング勉強会 その0
Hirokazu Fukami
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
プログラミングNet framework3のお題
プログラミングNet framework3のお題
Kazushi Kamegawa
最近の単体テスト
最近の単体テスト
Ken Morishita
Tokyo r38
Tokyo r38
Takashi Minoda
Tdd
Tdd
Takaya Kotohata
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ
Kouhei Sutou
nseg第5回勉強会
nseg第5回勉強会
ko ty
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
Similar to リーダブルコード 1.0'
(20)
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Start!! Ruby
Start!! Ruby
可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Programming camp code reading
Programming camp code reading
リーダブルコード
リーダブルコード
「いいコード」をみんなで書こう!
「いいコード」をみんなで書こう!
一人でも出来るコードリーディング
一人でも出来るコードリーディング
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
プログラミング勉強会 その0
プログラミング勉強会 その0
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
プログラミングNet framework3のお題
プログラミングNet framework3のお題
最近の単体テスト
最近の単体テスト
Tokyo r38
Tokyo r38
Tdd
Tdd
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ
nseg第5回勉強会
nseg第5回勉強会
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
リーダブルコード 1.0'
1.
リーダブルコード1.0 ~ 誰にでも読みやすいコードを目指して~
2.
出典 リーダブルコード– より良いコードを書く
ためのシンプルで実践的なテクニック Amazonでは★4.5の好評価! ★★★★★ 初級者にも上級者にもおすすめ ★★★★★ スラスラ読める実践的なコーディング指針 ★★★★★ 優れたコードを書く切欠を与えてくれる本
3.
リーダブルコードって何?
4.
リーダブルコードって何? • Readable
code = 読みやすいコード リーダブルコードとは、 ”他の人が最短時間で理解できるように書かれているコード”
5.
スパゲティコードなら知ってるよ?
6.
スパゲティコードって言葉は聞いたことあるなぁ • スパゲティプログラムまたはスパゲティコードとは、制作したプログラ
マ以外にとって解読困難である事を表す俗語 • 例) – goto文の濫用 – 多重継承の濫用 – スコープが大きい
7.
スパゲティコードじゃないけど • どちらの方が読みやすいですか?
if ((bucket = findBucket(key) ) || !backet.isOccupied()) { } bucket = findBucket(key); if (bucket != null) { assert(!bucket.isOccupied); }
8.
何のため読みやすいコードを書くの? • チームの他の人のため
• 未来のメンバーのため • 未来の自分のため
9.
ここで思い出して下さい!
10.
自分の書いたコードって あなたはどのくらい覚えていますか?
11.
ふたりのプログラマの会話 A「自分が書いたコードってどのくらい覚えているんですか?」 B「ほとんど覚えていないっすよ」
A「直すときどうするんですか?わからなくなっているじゃないですか」 B「忘れても見たら簡単にわかるように書いておくんですよ」
12.
どうすればリーダブルになるか?
13.
リーダブルにする4つのポイント 1. 命名
2. コメント 3. 制御フロー 4. 処理の分割と構成
14.
1. 命名
15.
• 変数名、関数名は機能が一目瞭然でわかるものにす る
– StartPage() • Startは便利な単語だが、汎用的すぎて具体的ではない。作るの か?始めるのか?開くのか?わかりにくい • 代替案 – CreatePage, beginPage, openPage • 他にもないか考えてみよう – Send, find, make, get, set … 命名1
16.
命名2 • tmpやretvalなどの汎用的な名前は避ける
– 何をやっているか一目瞭然ではない • 抽象的な名前より具体的な名前を使う – 「サーバー開始」より、サーバーのどの機能を開始するかを明示した方が 良い • 名前に情報を追加する – 時間でミリ秒を返すなら、begin_msのようにミリ秒を表す言葉を追加す るとベター
17.
命名3 • 誤解されない明確な名前
– 他の意味と間違えられることはないだろうか? • 限界値を求める場合、MAX, MINなどを頭につける – MAX_VERTICAL_LENGTH、MIN_HORIZON_LENGTH • 範囲を指定する場合first, lastなど使う • 限定的な範囲だとbegin, endあたりも良い • get*()はメンバの値を返すだけの軽量な関数である。あまり色々な処理をす る関数の名前にふさわしくない。 最善の名前とは、誤解されない名前である。つまり、あなたのコードを読んで いる人が、君の意図を正しく理解できるということだ
18.
カラフルな単語を探してみよう • send
→ deliver, dispatch(発送する), announce, distribute(分配する), route • find → search, extract, locate, recover • start → launch, create, begin, open • make → create, setup, build, generate(~を生む), compose, add, new…
19.
命名4 • スコープの大きな変数には長い名前をつける、逆にス
コープの小さな変数には短い名前であることが感覚的 に良い
20.
• Date型をString型に変換する関数がある場合、どういう形式で 返すのかわかるようにするのも、良い方法である。
• String toDateString(Date date); ↓ • String toYYYYMMDD(Date date);
21.
• booleanの変数やメソッド名 •
if (user.auth()) { • // 著者は・・何してる? • } • if (user.hasAuthority()) { • // is, has, canを頭につけると途端にわかりやすくなる • }
22.
2. // コメント
23.
コメント1 • コードを見てすぐわかることをコメントに書かない。
– setProfit(int profit) // profitに新しい値を設定する • 価値の無いコメントを書かない // 与えられたsubtreeに含まれるnameとdepthに合致したNodeを見つける findNodeInSubtree(Node subtree, String name, int depth);
24.
コメント2 • 読み手を意識して伝える
– 嵌りそうな罠、ここは紛らわしいので注意!とか – 質問されそうなことを書いておく – コードの欠陥にコメントをつける • // TODO: あとで手をつける • // FIXME: 既知の不具合があるコード • // HACK: あまり綺麗じゃない解決策 • // XXX 危険!大きな問題がある
25.
コメント3 • 曖昧な代名詞を避ける。
– 「これを」、「それを」等の表現は避ける 「データを」、「キャッシュを」・・・具体的に • 歯切れの悪い文章を磨く // 広告の使用に応じて優先度を変える ⇓ // 広告の使用頻度によって優先度を上げる
26.
// このシステムは日本国内に限られているので //
電話番号で国番号を入力する必要はない または、実例で補足する /** ** 平成和暦日付文字列を解析してDateとして返却する ** 例: ** 平成24年10月31日はOK ** H24.10.31はOK ** H24.1月2日はNG */
27.
コメントのポイント ◎コードの意図を読み手に理解してもらう ◎コメントは領域に対する情報の比率が高くなければならない
◎コードの意図は詳細レベルではなく、高レベルで記述する
28.
少しおさらい • 高レベル言語とは?
• 高級言語とは、プログラミング言語のうち、より自然語に近く、人間にとって理解しやす い構文や概念を持った言語の総称である。 • 高級言語は、主に英単語や記号などを組み合わせて命令を記述し、コンパイラやイン タープリタなどで機械語に変換され、実行される。より機械語に近い言語で記述を行 う低級言語(低水準言語)と比べて、言語の理解がしやすく、また汎用性が高いと いう利点がある。 - IT用語辞典BINARYより抜粋
29.
3. { 制御フロー}
30.
制御フロー1 • 条件式の並び順
– 変化する方を左、固定値を右に配置する if (10 < length) // こちらより if (length > 10) // こちらの方が読みやすい
31.
制御フロー2 • if/elseブロックの並び順
– 条件は否定形より、肯定形を使う • if (!debug)ではなく、if (debug)を(なるべく)使う – 関心を引く条件や目立つ条件を先に書く • 条件に応じて、否定を先に書くこともある
32.
制御フロー3 • ネストを浅くする
if (条件1) { // 処理1 if (条件4){ // 処理4 } else { // 処理5 if (条件5) { // 処理6 if (条件6){ // 処理7 if(条件7) { // 処理9 } else { // 処理10 if(条件8) { // 処理11 } else { // 処理12 } } } } else { // 処理8 } } } } else if (条件2) { //処理2 if(条件2) { // 処理3 } } ・・・これは以前の現場で私が出会ったコードです。
33.
制御フロー4 • ネストを深くするより、ガード節を作って、
早めにリターンすると読み手にとってはわかりやすい。 (ループでは、breakを使って早めにリターンする)
34.
制御フローのポイント • 制御フローはできるだけ自然にする。コードの読み手が
立ち止まったり、読み返したりしないように書く
35.
4. 処理の分割と構成()
36.
処理の分割と構成1 • タスクを列挙して、処理を分割する
• コードはタスクを1つずつ行うようにする • 一つのクラスにゴチャゴチャ機能を詰め込まない
37.
ここで質問
38.
ド・モルガンの法則って覚えていますか?
39.
「「A かつB である」なん
てことはない」 とは、 「AでないかB でない」 と同じ意味になる、という 法則。 • if (!(A && B) == !A || !B) { } • if (!(A || B) == !A && !B) { } 「ド・モルガンの法則」とは、AND演算とOR演 算を相互に変換するものです。以上のように、 左辺のAND演算を右辺のOR演算に変換し たり、左辺のOR演算を右辺のAND演算に変 換します。ド・モルガンの法則に相当するものは、 四則演算にはありません。論理演算ならではの 法則なのです。 ド・モルガンの法則
40.
処理の分割と構成3 • 巨大になってしまった処理
– 条件式で条件内に処理を詰め込みたい場合は、説明変数 やマクロに代入し、それを比較するほうが読みやすくなる。 • コピペミス・タイプミスを減らせる • 横幅が狭くなるので、コードが読みやすくなる ※ しかしマクロの多用は読みにくくなる恐れもある! ケースバイケースで使うべき
41.
処理の分割と構成4 • グローバル変数は、読みにくく、どこで使っているかわかりにくいの
で、出来る限りスコープの小さい変数を使用する
42.
☆おまけ • 汚い実装をするぐらいなら標準APIから使えそうなものを探す
• 条件分岐に整数値や文字列を使わないでenum型を使う • エラーメッセージを読みやすくする
43.
さて、まとめます リーダブルコードとは?
44.
リーダブルコードとは、 ”他の人が最短時間で理解できるように書かれているコード” 読みやすいコード
忘れてもよいコード
45.
出典 リーダブルコード– より良いコードを書く
ためのシンプルで実践的なテクニック Amazonでは★4.5の好評価! ★★★★★ 初級者にも上級者にもおすすめ ★★★★★ スラスラ読める実践的なコーディング指針 ★★★★★ 優れたコードを書く切欠を与えてくれる本
46.
ご清聴ありがとうございました。
Editor's Notes
Resultは汎用的な名前で便利であるが、 全く情報がない、もう少し踏み込んで意味があるものにしていきましょう
startSever()より、openPort() sec, min
Download now