Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Kota Uchida
3,482 views
プログラミング作法
Read more
6
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 27
2
/ 27
3
/ 27
4
/ 27
5
/ 27
6
/ 27
7
/ 27
8
/ 27
9
/ 27
10
/ 27
11
/ 27
12
/ 27
13
/ 27
14
/ 27
15
/ 27
16
/ 27
17
/ 27
18
/ 27
19
/ 27
20
/ 27
21
/ 27
22
/ 27
23
/ 27
24
/ 27
25
/ 27
26
/ 27
27
/ 27
More Related Content
PDF
Rpn and forth 超入門
by
Yoshitaka Seo
PPTX
高度に最適化された移植可能なメモリマネージャ
by
DADA246
PPTX
Preseeding Debian
by
Emma Haruka Iwao
PPT
ZFSのソースコードをチラ見してみる
by
Koichi Suzuki
PDF
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
by
t-sin
PPT
080720 Vim M
by
Takuya Hashimoto
PDF
関数型志向Python - LLまつり2013
by
Esehara Shigeo
KEY
core dumpでcode golf
by
Nomura Yusuke
Rpn and forth 超入門
by
Yoshitaka Seo
高度に最適化された移植可能なメモリマネージャ
by
DADA246
Preseeding Debian
by
Emma Haruka Iwao
ZFSのソースコードをチラ見してみる
by
Koichi Suzuki
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
by
t-sin
080720 Vim M
by
Takuya Hashimoto
関数型志向Python - LLまつり2013
by
Esehara Shigeo
core dumpでcode golf
by
Nomura Yusuke
What's hot
PDF
文字コードとセキュリティ
by
Kenta Yamamoto
PDF
ファイルの隠し方
by
mfumi
PDF
Unity3dにおけるus c# boo比較
by
Nobukazu Hanada
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
PDF
Goで言語処理系(の途中まで)を作ろう
by
Esehara Shigeo
PPTX
私がPerlを使う理由
by
Yohei Azekatsu
PDF
C-langage
by
Hiramatsu Ryosuke
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
PDF
黒い画面克服委員会 Vol.1
by
Atsuko MATSUOKA
PDF
TaTa's Present
by
050h
PDF
SDK for NFC Starter Kit(2) 使ってみる
by
Hirokuma Ueno
文字コードとセキュリティ
by
Kenta Yamamoto
ファイルの隠し方
by
mfumi
Unity3dにおけるus c# boo比較
by
Nobukazu Hanada
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
Goで言語処理系(の途中まで)を作ろう
by
Esehara Shigeo
私がPerlを使う理由
by
Yohei Azekatsu
C-langage
by
Hiramatsu Ryosuke
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
黒い画面克服委員会 Vol.1
by
Atsuko MATSUOKA
TaTa's Present
by
050h
SDK for NFC Starter Kit(2) 使ってみる
by
Hirokuma Ueno
Viewers also liked
PDF
覚えておきたいプログラミング作法
by
Junya Shimazu
PDF
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
PDF
良い?悪い?コードコメントの書き方
by
Shigenori Sagawa
PDF
コーディングスタイル入門~人に伝えるプログラミング~
by
Hideki MACHIDA
PDF
13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話
by
Kei Nakazawa
PDF
Re viewのリアルタイムプレギュー機能をつくってみたよ
by
Toshihiro Yagi
PDF
ReVIEW & CI - ChefでCI環境構築
by
Masahiro Wakame
PDF
良質なコードを高速に書くコツ
by
Shunji Konishi
PDF
名前重要 超重要
by
baban ba-n
PDF
書籍制作でReVIEWを使う実践ワークフロー
by
Masahiro Hidaka
PDF
オブジェクト指向やめましょう
by
なおき きしだ
PDF
ネイティブ開発アンチパターン
by
Yuki Tamura
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
PDF
失敗から学ぶゲーム開発(ドラゴンジェネシス〜聖戦の絆〜の場合)
by
Yuki Tamura
PPTX
VRゲーム開発の現在と将来
by
Haruto Watanabe
覚えておきたいプログラミング作法
by
Junya Shimazu
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
良い?悪い?コードコメントの書き方
by
Shigenori Sagawa
コーディングスタイル入門~人に伝えるプログラミング~
by
Hideki MACHIDA
13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話
by
Kei Nakazawa
Re viewのリアルタイムプレギュー機能をつくってみたよ
by
Toshihiro Yagi
ReVIEW & CI - ChefでCI環境構築
by
Masahiro Wakame
良質なコードを高速に書くコツ
by
Shunji Konishi
名前重要 超重要
by
baban ba-n
書籍制作でReVIEWを使う実践ワークフロー
by
Masahiro Hidaka
オブジェクト指向やめましょう
by
なおき きしだ
ネイティブ開発アンチパターン
by
Yuki Tamura
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
失敗から学ぶゲーム開発(ドラゴンジェネシス〜聖戦の絆〜の場合)
by
Yuki Tamura
VRゲーム開発の現在と将来
by
Haruto Watanabe
Similar to プログラミング作法
PDF
C-HelperでC言語を効率的に学習しよう
by
Kota Uchida
PPTX
C言語 学習教材
by
Jun MITANI
PDF
#6:実数と繰り返し
by
長岡技術科学大学 自然言語処理研究室
PDF
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
by
monglee
PPTX
C言語 学習教材
by
Jun MITANI
PDF
Usp友の会勉強会、ジャクソン構造図の巻(後編)
by
umidori
PDF
第2回勉強会スライド
by
koturn 0;
PDF
#5:プログラミングの基本
by
長岡技術科学大学 自然言語処理研究室
PDF
プログラミング学習のための学習
by
siranon *
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PDF
超絶技巧プログラミングの世界(FTD2015)
by
mametter
PDF
Good coding for research
by
Keiji Harada
PDF
Ssaw08 0916
by
Atsushi Tadokoro
PDF
第1回勉強会スライド
by
koturn 0;
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
by
Jun MITANI
PDF
Processing授業テキスト
by
Suzuki Junko
PDF
プログラマ講習第3回
by
Yuma Yoshimoto
PDF
#7:演算子と分岐
by
長岡技術科学大学 自然言語処理研究室
PDF
第3回yidev coding guideline読み
by
Tomohiko Okita
ODP
Rubyのソースコードを読んでみよう(入門編)
by
baban ba-n
C-HelperでC言語を効率的に学習しよう
by
Kota Uchida
C言語 学習教材
by
Jun MITANI
#6:実数と繰り返し
by
長岡技術科学大学 自然言語処理研究室
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
by
monglee
C言語 学習教材
by
Jun MITANI
Usp友の会勉強会、ジャクソン構造図の巻(後編)
by
umidori
第2回勉強会スライド
by
koturn 0;
#5:プログラミングの基本
by
長岡技術科学大学 自然言語処理研究室
プログラミング学習のための学習
by
siranon *
競技プログラミングのためのC++入門
by
natrium11321
超絶技巧プログラミングの世界(FTD2015)
by
mametter
Good coding for research
by
Keiji Harada
Ssaw08 0916
by
Atsushi Tadokoro
第1回勉強会スライド
by
koturn 0;
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
by
Jun MITANI
Processing授業テキスト
by
Suzuki Junko
プログラマ講習第3回
by
Yuma Yoshimoto
#7:演算子と分岐
by
長岡技術科学大学 自然言語処理研究室
第3回yidev coding guideline読み
by
Tomohiko Okita
Rubyのソースコードを読んでみよう(入門編)
by
baban ba-n
プログラミング作法
1.
プログラミング作法
分かりやすいソースコード beatle 13年3月16日土曜日
2.
自己紹介
• mixC++では2011年冬から活動 • C++/C#が好き • プログラミング教育の研究 13年3月16日土曜日
3.
プログラミング作法
• ブライアン・カーニハン • 当たり前だが重要なこと • 可読性・保守性 13年3月16日土曜日
4.
メニュー
• 命名 • スタイル • コメント • 移植性 13年3月16日土曜日
5.
命名
• 「プログラミングは『名前』が9割。」 あるブログより • 良い名前 ≒ 良いプログラム 13年3月16日土曜日
6.
命名規則
• 全体で統一する • ルールの内容自体は重要でない • PascalCase camelCase snake_case 13年3月16日土曜日
7.
変数名
• 長く、説明的な名前 グローバル変数 // 現在の入力キューの長さ int npending = 0; • 短く、簡潔な名前 ローカル変数 for (i = 0; i < nelems; i++) for (theElementIndex = 0; theElementIndex < numberOfElements; theElementIndex++) 13年3月16日土曜日
8.
関数名
• 「動詞+名詞」が基本 • putchar • getTime • 真偽値を返す関数 if (check_digit(c)) ... if (is_digit(c)) ... 13年3月16日土曜日
9.
スタイル
• 全体で統一する • ルールの内容自体は重要でない • K&R BSD/Allman GNU 13年3月16日土曜日
10.
自然な形の式
• 音読するつもりで書く • 否定は分かりにくい if (!(block_id < actblks) || !(block_id >= unblocks)) ... if ((block_id >= actblks) || (block_id < unblocks)) ... 13年3月16日土曜日
11.
かっこを使おう
• 演算子の優先順位は分かりにくい • 本来不要な場所にも付ける leap_year = y % 4 == 0 && y % 100 != 0 || y % 400 == 0; leap_year = ((y%4 == 0) && (y%100 != 0)) || (y%400 == 0); 13年3月16日土曜日
12.
慣用句と一貫性
i = 0; while (i <= n-1) array[i++] = 1.0; for (i = n; --i >= 0; ) array[i] = 1.0; for (i = 0; i < n; i++) array[i] = 1.0; ループの慣用句! 13年3月16日土曜日
13.
慣用句と一貫性
• 他にも様々な慣用句がある • リストのトラバース for (p = list; p != NULL; p = p->next) • 無限ループ for (;;) while (1) 13年3月16日土曜日
14.
悪いコメント1
• 当たり前のことはいちいち書くな /* SUCCESS を返す */ return SUCCESS; /* ゼロエントリカウンタをインクリメント */ zerocount++; 13年3月16日土曜日
15.
悪いコメント2
• 悪いコードにコメントをつけるな /* "result"が0ならマッチするものが見つかったので真を返す そうでなければ"result"はゼロ以外なので偽を返す */ printf("*** isword returns !result = %dn", !result); return(!result); printf("*** isword returns matchfound = %dn", matchfound); return matchfound; コメント > コードなら怪しい 13年3月16日土曜日
16.
悪いコメントその他
• コードと矛盾したコメント • 読者の混乱を増大させるコメント 13年3月16日土曜日
17.
良いコメント1
• グローバルデータにコメント • 必要に応じて参照されるメモ struct Status { /* プレフィクス+サフィックスリスト */ char *pref[NPREF]; /* プレフィクス用の単語 */ Suffix *suf; /* サフィックスのリスト */ State *next; /* ハッシュテーブル中の次の項目 */ }; 13年3月16日土曜日
18.
良いコメント2
• 関数にコメント • 関数が全体として何をするか // random: [0..r-1]の範囲の整数を返す int random(int r) { return (int)(Math.floor(Math.random()*r)); } 13年3月16日土曜日
19.
移植性
• 自分の環境だけで動けばいい? • 自分の環境だって変わる! • 移植性向上の労力 →優れたプログラミング 13年3月16日土曜日
20.
標準に固執する
• 言語の標準に従う • ANSI-C, C99, C++11 ... • 標準ライブラリを使う • stdio.h, iostream, STL ... 13年3月16日土曜日
21.
条件コンパイル
• 条件コンパイルは避けよう • 全組合せでテストできますか? #ifdef _MAC printf("This is Macintoshr"); #else ほかのシステムではこの文で構文エラー #endif 13年3月16日土曜日
22.
まとめ
• 命名:説明的な名前 vs 簡単な名前 • スタイル:慣用句で見やすく! • コメント:整合性を意識 • 移植性:良いプログラムへの道 13年3月16日土曜日
23.
命名するということ
• 名前を付ける =抽象化 =プログラミング • 例えば、配列のコピー 13年3月16日土曜日
24.
処理を埋め込む
int main(void) { char buf[16], data[N]; int block = 0, i; ... // 16バイトずつ読み込んで、dataに格納 while (1) { fread(buf, 1, sizeof(buf), fp); if (feof(fp)) break; for (i = 0; i < sizeof(buf); i++) data[block * sizeof(buf) + i] = buf[i]; block++; } } 13年3月16日土曜日
25.
関数に分ける
int main(void) { char buf[16], data[N]; int block = 0, i; ... // 16バイトずつ読み込んで、dataに格納 while (1) { fread(buf, 1, sizeof(buf), fp); if (feof(fp)) break; copy_array(data + block * sizeof(buf), buf, sizeof(buf)); block++; } } 13年3月16日土曜日
26.
// 16バイトずつ読み込んで、dataに格納
while (1) { fread(buf, 1, sizeof(buf), fp); if (feof(fp)) break; for (i = 0; i < sizeof(buf); i++) data[block * sizeof(buf) + i] = buf[i]; block++; 抽象化 } // 16バイトずつ読み込んで、dataに格納 while (1) { fread(buf, 1, sizeof(buf), fp); if (feof(fp)) break; copy_array(data + block * sizeof(buf), buf, sizeof(buf)); block++; } 13年3月16日土曜日
27.
ラベル付けは大事!!
ご清聴ありがとうございました 13年3月16日土曜日
Download