Enviar búsqueda
Cargar
XP寺子屋第9回「シンプル・プログラミング」
•
3 recomendaciones
•
2,592 vistas
takepu
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 54
Descargar ahora
Descargar para leer sin conexión
Recomendados
R による文書分類入門
R による文書分類入門
Takeshi Arabiki
Tokyo r33 beginner
Tokyo r33 beginner
Takashi Minoda
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
koba cky
Yamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
考司 小杉
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Takashi J OZAKI
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
Gorinphp0729
Gorinphp0729
akitsukada
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Recomendados
R による文書分類入門
R による文書分類入門
Takeshi Arabiki
Tokyo r33 beginner
Tokyo r33 beginner
Takashi Minoda
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
koba cky
Yamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
考司 小杉
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Takashi J OZAKI
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
Gorinphp0729
Gorinphp0729
akitsukada
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
Yohei Sato
Feature Selection with R / in JP
Feature Selection with R / in JP
Sercan Ahi
パターン認識 第10章 決定木
パターン認識 第10章 決定木
Miyoshi Yuya
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
Shintaro Fukushima
プログラマのための文書推薦入門
プログラマのための文書推薦入門
y-uti
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
Rによる分類木 入門
Rによる分類木 入門
Hiro47
Rで学ぶロバスト推定
Rで学ぶロバスト推定
Shintaro Fukushima
不均衡データのクラス分類
不均衡データのクラス分類
Shintaro Fukushima
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando
はじめての「R」
はじめての「R」
Masahiro Hayashi
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
Atsushi Hayakawa
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
Shintaro Fukushima
Tokyo r47 beginner_2
Tokyo r47 beginner_2
Takashi Minoda
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
Tetsuya Hasegawa
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
デザインパターン勉強会
デザインパターン勉強会
Tetsuya Yoshida
Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~
takepu
Más contenido relacionado
La actualidad más candente
Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
Yohei Sato
Feature Selection with R / in JP
Feature Selection with R / in JP
Sercan Ahi
パターン認識 第10章 決定木
パターン認識 第10章 決定木
Miyoshi Yuya
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
Shintaro Fukushima
プログラマのための文書推薦入門
プログラマのための文書推薦入門
y-uti
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
Rによる分類木 入門
Rによる分類木 入門
Hiro47
Rで学ぶロバスト推定
Rで学ぶロバスト推定
Shintaro Fukushima
不均衡データのクラス分類
不均衡データのクラス分類
Shintaro Fukushima
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando
はじめての「R」
はじめての「R」
Masahiro Hayashi
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
Atsushi Hayakawa
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
Shintaro Fukushima
Tokyo r47 beginner_2
Tokyo r47 beginner_2
Takashi Minoda
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
Tetsuya Hasegawa
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
La actualidad más candente
(20)
Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
Feature Selection with R / in JP
Feature Selection with R / in JP
パターン認識 第10章 決定木
パターン認識 第10章 決定木
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
プログラマのための文書推薦入門
プログラマのための文書推薦入門
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Rによる分類木 入門
Rによる分類木 入門
Rで学ぶロバスト推定
Rで学ぶロバスト推定
不均衡データのクラス分類
不均衡データのクラス分類
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
はじめての「R」
はじめての「R」
Ekmett勉強会発表資料
Ekmett勉強会発表資料
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
Van laarhoven lens
Van laarhoven lens
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
Tokyo r47 beginner_2
Tokyo r47 beginner_2
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Destacado
デザインパターン勉強会
デザインパターン勉強会
Tetsuya Yoshida
Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~
takepu
男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介
takepu
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
takepu
上級救命技能認定
上級救命技能認定
Tetsuya Yoshida
オブジェクト指向モデリング
オブジェクト指向モデリング
takepu
XP寺子屋 デザインパターン入門
XP寺子屋 デザインパターン入門
takepu
C言語よくある誤り
C言語よくある誤り
長岡技術科学大学 自然言語処理研究室
事例発表 小山
事例発表 小山
takepu
Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」
takepu
Xp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLT
takepu
Email Deliverability Guide - メールを確実に届けるために
Email Deliverability Guide - メールを確実に届けるために
SendGrid JP
デブサミ2011(17-B-3)講演資料「チケット駆動開発~タスクマネジメントからAgile開発へ」
デブサミ2011(17-B-3)講演資料「チケット駆動開発~タスクマネジメントからAgile開発へ」
akipii Oga
現場実践主義としてのリーン開発とアジャイル
現場実践主義としてのリーン開発とアジャイル
Rakuten Group, Inc.
GoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターン
Gaprot
デザインパターン
デザインパターン
gaaupp
お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~
takepu
デザインパターン(state,strategy,template)
デザインパターン(state,strategy,template)
tniky1
行列のできるXp相談所 20110917
行列のできるXp相談所 20110917
takepu
Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」
takepu
Destacado
(20)
デザインパターン勉強会
デザインパターン勉強会
Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~
男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
上級救命技能認定
上級救命技能認定
オブジェクト指向モデリング
オブジェクト指向モデリング
XP寺子屋 デザインパターン入門
XP寺子屋 デザインパターン入門
C言語よくある誤り
C言語よくある誤り
事例発表 小山
事例発表 小山
Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」
Xp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLT
Email Deliverability Guide - メールを確実に届けるために
Email Deliverability Guide - メールを確実に届けるために
デブサミ2011(17-B-3)講演資料「チケット駆動開発~タスクマネジメントからAgile開発へ」
デブサミ2011(17-B-3)講演資料「チケット駆動開発~タスクマネジメントからAgile開発へ」
現場実践主義としてのリーン開発とアジャイル
現場実践主義としてのリーン開発とアジャイル
GoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターン
デザインパターン
デザインパターン
お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~
デザインパターン(state,strategy,template)
デザインパターン(state,strategy,template)
行列のできるXp相談所 20110917
行列のできるXp相談所 20110917
Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」
Similar a XP寺子屋第9回「シンプル・プログラミング」
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
Gorinphp0729
Gorinphp0729
akitsukada
初めてのHaskell (表)
初めてのHaskell (表)
karky7
私とOSS活動とPerl
私とOSS活動とPerl
Shunsuke Maeda
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!
KAIKenzo
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
賢次 海老原
ggplot2 110129
ggplot2 110129
Takashi Minoda
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Misrac20150523
Misrac20150523
Kiyoshi Ogawa
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Shinya Akiba
Introduction of Python
Introduction of Python
Tomoya Nakayama
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
Easy caching and logging package using annotation in Python
Easy caching and logging package using annotation in Python
Yasunori Horikoshi
C言語 学習教材
C言語 学習教材
Jun MITANI
HiRoshimaR3_IntroR
HiRoshimaR3_IntroR
SAKAUE, Tatsuya
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Satoshi Yamada
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
Similar a XP寺子屋第9回「シンプル・プログラミング」
(20)
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Gorinphp0729
Gorinphp0729
初めてのHaskell (表)
初めてのHaskell (表)
私とOSS活動とPerl
私とOSS活動とPerl
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!
Clojure programming-chapter-2
Clojure programming-chapter-2
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
ggplot2 110129
ggplot2 110129
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Misrac20150523
Misrac20150523
HPC Phys-20201203
HPC Phys-20201203
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Introduction of Python
Introduction of Python
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Easy caching and logging package using annotation in Python
Easy caching and logging package using annotation in Python
C言語 学習教材
C言語 学習教材
HiRoshimaR3_IntroR
HiRoshimaR3_IntroR
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Más de takepu
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
takepu
ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。
takepu
20121117 aut open_jam
20121117 aut open_jam
takepu
PFP関西ワークショップ#26
PFP関西ワークショップ#26
takepu
ペアプロとは? 20120331
ペアプロとは? 20120331
takepu
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
takepu
Lt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.ppt
takepu
劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→After
takepu
事例発表 本田
事例発表 本田
takepu
Et west2010 work-shop
Et west2010 work-shop
takepu
Xp Terakoya 05
Xp Terakoya 05
takepu
Xpfp 070626
Xpfp 070626
takepu
Xp Terakoya No02
Xp Terakoya No02
takepu
Xp Terakoya No04
Xp Terakoya No04
takepu
PFP WS #20 B-1
PFP WS #20 B-1
takepu
Más de takepu
(15)
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。
20121117 aut open_jam
20121117 aut open_jam
PFP関西ワークショップ#26
PFP関西ワークショップ#26
ペアプロとは? 20120331
ペアプロとは? 20120331
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Lt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.ppt
劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→After
事例発表 本田
事例発表 本田
Et west2010 work-shop
Et west2010 work-shop
Xp Terakoya 05
Xp Terakoya 05
Xpfp 070626
Xpfp 070626
Xp Terakoya No02
Xp Terakoya No02
Xp Terakoya No04
Xp Terakoya No04
PFP WS #20 B-1
PFP WS #20 B-1
XP寺子屋第9回「シンプル・プログラミング」
1.
1 「シンプル・プログラミング」 2013.11.02 XP寺子屋 XPJUG関西 / XP寺子屋
2.
2 自己紹介 XPJUG関西 / XP寺子屋
3.
3 ・名前 丈善(たけぷ~) : 西 丈善(たけぷ~) ・仕事 :
組み込み系 ・業界歴 : 20年以上 年以上 関西、 ・コミュニティ : XPJUG関西、PFP関西 関西 関西 ・使用言語 : C, C++ ・SNS : Twitter takepu FaceBook 西 丈善 ・宣伝 : ▼アジャイルラジオ 毎週水曜日公開 http://www.agileradio.info/ 開催決定! ▼XP祭り関西 祭 関西2014 2014年4月26開催決定! 年 月 開催決定 http://www.xpjug.jp ▼出張アジャイル社内研修(無料)受付中 出張アジャイル社内研修(無料) アジャイル社内研修 XPJUG関西 / XP寺子屋
4.
4 アジェンダ XPJUG関西 / XP寺子屋
5.
5 アジェンダ • • • • • • • 「シンプル・プログラミング」講座 コードレビュー 休憩 練習 実習 ふりかえり あとかたづけ XPJUG関西 / XP寺子屋 - 50分 10分 5分 30分 90分 10分 10分
6.
6 シンプル・プログラミング ? て何 っ XPJUG関西 / XP寺子屋
7.
7 ようこそ「シンプル・プログラミング」の世界へ! XPJUG関西 / XP寺子屋
8.
8 早速質問。 「シンプル」とは、どういう 意味? XPJUG関西 / XP寺子屋
9.
9 XPJUG関西 / XP寺子屋 kotobankより引用。
10.
10 続いて質問。 「シンプルなプログラム」 とは、どんなプログラム? XPJUG関西 / XP寺子屋
11.
11 ●行数が少ない? ●関数の数が少ない? XPJUG関西 / XP寺子屋
12.
12 大切なのは、 「分かりやすい」事. XPJUG関西 / XP寺子屋
13.
13 どっちが簡単? XPJUG関西 / XP寺子屋
14.
14 シンプルなプログラムのメリット • • • • • • • 間違いにくい バグが混入しにくい デバッグが簡単 他人が書いても分かりやすい バグの発見が容易 仕様変更が容易 性能改善も用意 XPJUG関西 / XP寺子屋
15.
15 シンプルなプログラムのデメリット • 人に自慢できる複雑で難解なコードを書いて悦 に入る事ができない • 複雑なコードを理解した時に得られる達成感が 得られない •
残業できない XPJUG関西 / XP寺子屋
16.
16 シンプルなプログラム と複雑なプログラム、 あなたはどちらを 選びますか? XPJUG関西 / XP寺子屋
17.
17 シンプル・プログラミング6つの原則 1. 2. 3. 4. 5. 6. コメントの書き方 名前の付け方 コピペ禁止 1関数1機能 ボトムアップアプローチ インクリメンタル開発 XPJUG関西 / XP寺子屋
18.
18 1.コメントの書き方 ? てた っ て知 っ XPJUG関西 / XP寺子屋
19.
19 1.コメントの書き方 • 基本は、「コメントが不要なくらい分かり易いコード を書く」. • どうしても説明が必要な箇所にコメントを書く. •
コメントは、「処理」では無く、「やりたい事」を書く. XPJUG関西 / XP寺子屋
20.
20 悪い例 /******************/ /* バブルソート */ /******************/ #include
<stdio.h> #define MAX 10 void main( ) { int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 }; int n,i,w; // 未整列データ数 for( n=MAX; n>1; n-- ) { for( i=0; i<n-1; i++ ) { // 次のデータが小さい if ( data[i]>data[i+1] ) { // 入れ替え— w=data[i]; data[i]=data[i+1]; data[i+1]=w; } } } printf("¥nソート後¥n"); for( i=0; i<MAX; i++ ) { printf("%d ",data[i]); } printf("¥n"); } XPJUG関西 / XP寺子屋
21.
21 改善例 /******************/ /* バブルソート */ /******************/ #include
<stdio.h> #define MAX 10 /******************/ /* バブルソート */ /******************/ #include <stdio.h> #define MAX 10 void main( ) { int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 }; int n,i,w; void main( ) { int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 }; int n,i,w; // 未整列データ数 for( n=MAX; n>1; n-- ) { for( i=0; i<n-1; i++ ) { // 次のデータが小さい if ( data[i]>data[i+1] ) { // 入れ替え— w=data[i]; data[i]=data[i+1]; data[i+1]=w; } } } バブルソートを // バブルソートを行う for( n=MAX; n>1; n-- ) { for( i=0; i<n-1; i++ ) { データを交換する // データを交換する if ( data[i]>data[i+1] ) { w=data[i]; data[i]=data[i+1]; data[i+1]=w; } } } ソート結果 表示する 結果を // ソート結果を表示する printf("¥nソート後¥n"); for( i=0; i<MAX; i++ ) { printf("%d ",data[i]); } printf("¥n"); printf("¥nソート後¥n"); for( i=0; i<MAX; i++ ) { printf("%d ",data[i]); } printf("¥n"); } XPJUG関西 / XP寺子屋 }
22.
22 解説 /******************/ /* バブルソート */ /******************/ バブルソートを //
バブルソートを行う /******************/ /* バブルソート */ /******************/ #include <stdio.h> #define MAX 10 データを交換する // データを交換する ソート結果 表示する 結果を // ソート結果を表示する void main( ) { int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 }; int n,i,w; バブルソートを // バブルソートを行う for( n=MAX; n>1; n-- ) { for( i=0; i<n-1; i++ ) { データを交換する // データを交換する if ( data[i]>data[i+1] ) { w=data[i]; data[i]=data[i+1]; data[i+1]=w; } } } •コメントは「やりたい事」 ソート結果 表示する 結果を // ソート結果を表示する printf("¥nソート後¥n"); for( i=0; i<MAX; i++ ) { printf("%d ",data[i]); } printf("¥n"); •コードは「実現方法」 } XPJUG関西 / XP寺子屋
23.
23 2.名前の付け方 にル ール があ るの ? XPJUG関西 / XP寺子屋
24.
24 2.名前の付け方 • 一般的に、コーディング規約で命名規則が決まっ ている. • しかし、諸事情でコーディングルールが無かったり、 非オブジェクト指向言語では、分かりにくい名称 がはびこっている. •
最近のオブジェクト指向言語で提唱されている命 名規則を使用することで、コードの可読性が向上 し、シンプルなプログラミングが可能となる. XPJUG関西 / XP寺子屋
25.
25 命名規則(1) 関数名 • 変数を取得する関数 –
XXX getXXX( ) • 変数を設定する関数 – void getXXX( XXX 変数 ) • Booleanを返す関数 – – – – – – – is + 形容詞,can + 動詞,has + 過去分詞,三単元動詞,三単元動詞 + 名詞. boolean isEmpty() // JavaBeans でプロパティとして扱える(推奨) boolean empty() // だめ!’空にする’という動詞的な意味に取れるため良くない. boolean canGet() boolean hasChanged() boolean contains(Object) boolean containsKey(Key) XPJUG関西 / XP寺子屋
26.
26 命名規則(2) 変数名 • Boolean
変数 – – – – 形容詞,is + 形容詞,can + 動詞,has + 過去分詞,三単元動詞,三単元動詞 + 名詞. boolean isEmpty boolean dirty boolean containsMoreElements • 全て有意な名前を付ける – Info, Data, Temp, Str, Bufという名前は極力使わない – ループカウンタなどで用いる i, j, k も、適切な名前を付ける XPJUG関西 / XP寺子屋
27.
27 命名規則(3) 名前の対称性 • • • • • • • • • • • • • add/remove insert/delete get/set start/stop begin/end send/receive first/last get/release put/get up/down show/hide source/target open/close XPJUG関西 /
XP寺子屋 • • • • • source/destination increment/decrement lock/unlock old/new next/previous クラス名,メソッド名を付ける際は,本頁 記載の英語の対称性に気を付ける.
28.
28 悪い例 /****************/ /* 素因数分解 */ /****************/ #include
<stdio.h> #include <stdlib.h> void FuncFactorization ( int argc, char *argv[] ) { int n0,n; // 整数 int ns=2; // 素因数 int j; // 乗数 n0=atoi(argv[1]); // 因数分解 for( n=n0,ns=2; n>=ns; ns++ ) { for( j=0; n%ns==0; j++ ) { n /= ns; } if ( j==0 ) continue; // 1回も割り切れなかった printf("素因数:%d 乗数:%d¥n",ns,j); } } XPJUG関西 / XP寺子屋
29.
29 改善例 /****************/ /* 素因数分解 */ /****************/ #include
<stdio.h> #include <stdlib.h> void FuncFactorization ( int argc, char *argv[] ) { int n0,n; // 整数 int ns=2; // 素因数 // 乗数 int j; /****************/ /* 素因数分解 */ /****************/ #include <stdio.h> #include <stdlib.h> void DoFuncFactorization ( int argc, char *argv[] ) { int num; // 整数 int num_div; // 割り算した整数 int prime = 2; // 素因数 int multiple; // 乗数 n0=atoi(argv[1]); num=atoi(argv[1]); // 整数を入力 // 因数分解 for( n=n0,ns=2; n>=ns; ns++ ) { for( j=0; n%ns==0; j++ ) { n /= ns; } if ( j==0 ) continue; // 1回も割り切れなかった printf("素因数:%d 乗数:%d¥n",ns,j); } // 素因数分解 for( num_div=num,prime=2; num_div>=prime; prime++ ) { for( multiple=0; num_div%prime==0; multiple++ ) { num_div /= prime; } if ( multiple==0 ) continue; // 1回も割り切れなかった printf("素因数:%d 乗数:%d¥n",prime,multiple); } } } XPJUG関西 / XP寺子屋
30.
30 3.コピペ禁止 ! 幅Up 大 生産性 で コピペ ? のでは な XPJUG関西 / XP寺子屋
31.
31 3.コピペ禁止 ダメ、絶対! XPJUG関西 / XP寺子屋
32.
32 「コピペ禁止」の理由 • コピペすると、同じコードが重複して存在することになる。 • ある場所でバグが発生すると、重複するコードすべて変更 する必要がある。うっかり修正が漏れると、バグが発生。 •
更にややこしいのは、「関数A」では修正必要だが、「関数 B」では変更してはならない場合。それが簡単に気付ける かどうか想像して欲しい。 • コピペはバグの温床と知るべし。 XPJUG関西 / XP寺子屋
33.
悪い例 //----------------------------------------int FuncA( int
*array, int array_cnt ) { int idx; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); } //----------------------------------------int FuncB( int *array1, int array_cnt1, int *array2, int array_cnt2 ) { int idx; int *array; int array_cnt; array = array1; array_cnt = array_cnt1; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); array = array2; array_cnt = array_cnt2; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); } XPJUG関西 / XP寺子屋 33
34.
改善例 //----------------------------------------int FuncA( int
*array, int array_cnt ) { int idx; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); } //----------------------------------------int FuncB( int *array1, int array_cnt1, int *array2, int array_cnt2 ) { int idx; int *array; int array_cnt; array = array1; array_cnt = array_cnt1; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); array = array2; array_cnt = array_cnt2; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); } XPJUG関西 / XP寺子屋 //---------------------------------------------------------void arrayPrint( int array, int array_cnt ) { int idx; for( idx=0; idx<array_cnt; idx++ ) { printf( "%d ", array[idx] ); } printf( "¥n" ); } //---------------------------------------------------------int FuncA( int *array, int array_cnt ) { arrayPrint( array, array_cnt ); } //---------------------------------------------------------int FuncB( int *array1, int array_cnt1, int *array2, int array_cnt2 ) { arrayPrint( array1, array_cnt1 ); arrayPrint( array2, array_cnt2 ); } 小さい関数を作る事で、再利用性が 向上します。 34
35.
35 4.1関数1機能 に イイの コ がカッ 方 複雑な 関数は XPJUG関西 / XP寺子屋
36.
36 4.1関数1機能 • シンプル(=簡単)にコードを書くためには、複 雑なコードを書いてはダメ。 • 関数は「小さい機能をまとめる」のはNG。 •
「小さい関数をたくさん作る」方がシンプル。 XPJUG関西 / XP寺子屋
37.
37 悪い例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> int main(void) { FILE *fp; char *fname = "test.txt"; char str[100]; fp = fopen( fname, "r" ); if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } fclose( fp ); return 0; } XPJUG関西 / XP寺子屋
38.
38 改善例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> int main(void) { FILE *fp; char *fname = "test.txt"; char str[100]; fp = fopen( fname, "r" ); if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } fclose( fp ); return 0; } XPJUG関西 / XP寺子屋 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include <stdio.h> //------------------------------int main() { FILE *fp = NULL; fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } //------------------------------void closeFile( FILE *fp ) { fclose( fp ); }
39.
39 5.ボトムアップアプローチ ょ!? が普通でし の 上から書く XPJUG関西 / XP寺子屋
40.
40 5.ボトムアップアプローチ • 下(下層)の関数から書く。 • 作った関数単体でテストする。 •
テストがパスすれば、その関数の1つ上位関数 を作り、以降これを繰り返す。 XPJUG関西 / XP寺子屋
41.
41 ボトムアップアプローチのメリット • 下位関数から開発するので、コンパイルが通 しやすい。 • 足元からしっかり開発するので、バグが混入し にくい。 •
呼び出す関数を考慮しなくて済むので、開発 中の関数にのみ集中できる。 XPJUG関西 / XP寺子屋
42.
42 悪い例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> //------------------------------int main() { FILE *fp = NULL; ① fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } ② //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } //------------------------------void closeFile( FILE *fp ) { fclose( fp ); } XPJUG関西 / XP寺子屋 ③ ④ ①~④の順に開発する
43.
43 改善例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include <stdio.h> //------------------------------int main() { FILE *fp = NULL; //------------------------------int main() { FILE *fp = NULL; ① fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } ④ fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } ② //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } ③ //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } ③ //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } ② //------------------------------void closeFile( FILE *fp ) { fclose( fp ); } ④ //------------------------------void closeFile( FILE *fp ) { fclose( fp ); } ① XPJUG関西 / XP寺子屋 ①~③は最下層なのでどの順に開発しても良い
44.
44 ポイント • この方法を実現するためには、xUnitなどのテ スト環境が必要。 • テスト環境が無ければ、main(
)から開発中の 関数を呼び出せばOK。関数を追加する度に main( ) を変更する。最後にmain( )を実装す る。 XPJUG関西 / XP寺子屋
45.
45 6.インクリメンタル開発 手戻 りは 悪! XPJUG関西 / XP寺子屋
46.
46 6.インクリメンタル開発 インクリメンタル(機能を順次追加する)に開発する。 ①手短な設計 → ②テスト
→ ③コード → ④リファクタリング これを、関数単位に実施する。 ①手短な設計 – 関数の仕様を考える • ②テスト – 関数のテストパターンを考える – xUnitのテストコードを書く • ③コード – テストがパスする様、製品コードを書く • ④リファクタリング – コードを見直し、必要であれば修正する。 • • • • XPJUG関西 / XP寺子屋
47.
47 悪い例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> //------------------------------int main() { FILE *fp = NULL; ① fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } •①~④の順に開発する •一気にテストを実施 •バグってたら修正 ② //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } ③ //------------------------------void closeFile( FILE *fp ) { fclose( fp ); } ④ XPJUG関西 / XP寺子屋 •手短な設計 •「リファクタリング」しない
48.
改善例 /********************************/ /* ファイルの内容を1行づつ表示 */ /********************************/ #include
<stdio.h> //------------------------------int main() { FILE *fp = NULL; •①開発 ④ fp = openFile( "test.txt" ) ; if( fp == NULL ) { printf( "%sファイルが開けません¥n", fname ); return -1; } displayFile( fp ); closeFile( fp ); return 0; } //------------------------------FILE* openFile( char * fname) { return fopen( fname, "r" ); } ③ •テストパターン検討 •①開発 •main( )から①を呼び出しテスト •①リファクタリング •②開発 •手短な設計 //------------------------------void displayFile( FILE* fp ) { char str[100]; printf( "¥n-- fgets() --¥n" ); while( fgets( str, 100, fp ) != NULL ) { printf( "%s", str ); } } ② //------------------------------void closeFile( FILE *fp ) { fclose( fp ); } ① XPJUG関西 / XP寺子屋 •手短な設計 •テストパターン検討 •②開発 •main( )から②を呼び出しテスト •②リファクタリング 48
49.
49 「シンプル・プログラミング 6つの原則」 をご紹介しました。 XPJUG関西 / XP寺子屋
50.
50 シンプル・プログラミング6つの原則 1. 2. 3. 4. 5. 6. コメントの書き方 名前の付け方 コピペ禁止 1関数1機能 ボトムアップアプローチ インクリメンタル開発 XPJUG関西 / XP寺子屋
51.
51 しかし、開発状況により 「6つの原則」を守れない 場合があります。 XPJUG関西 / XP寺子屋
52.
52 •新しい考え方を導入する時間が無い •メモリ空き容量が少なく、関数をまとめる必要 がある •高速化のため、変数名を短くする必要がある などなど。 XPJUG関西 / XP寺子屋
53.
53 大切なのは、 「分かりやすい」事. XPJUG関西 / XP寺子屋
54.
54 最後までお付き合い頂き、ありがとうございます。 XPJUG関西 / XP寺子屋
Descargar ahora