Suche senden
Hochladen
良質なコードを高速に書くコツ
•
16 gefällt mir
•
9,280 views
Shunji Konishi
Folgen
社内勉強会資料
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 14
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
どこに何を書くのか?
どこに何を書くのか?
pospome
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
Weitere ähnliche Inhalte
Was ist angesagt?
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
Moriharu Ohzu
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
akipii Oga
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
私にとってのテスト
私にとってのテスト
Takuto Wada
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
Was ist angesagt?
(20)
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
例外設計における大罪
例外設計における大罪
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
Pythonによる黒魔術入門
Pythonによる黒魔術入門
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
テストコードの DRY と DAMP
テストコードの DRY と DAMP
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
私にとってのテスト
私にとってのテスト
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
Andere mochten auch
オブジェクト指向やめましょう
オブジェクト指向やめましょう
なおき きしだ
JavaOne報告2017
JavaOne報告2017
なおき きしだ
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
チームとプロダクトをぶっ壊した話
チームとプロダクトをぶっ壊した話
Taichi Watanabe
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
Takafumi ONAKA
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
設計してますか?
設計してますか?
ke-m kamekoopa
C#アプリの作り方入門
C#アプリの作り方入門
森理 麟
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Cしゃーぷができるまで
Cしゃーぷができるまで
信之 岩永
人工知能に何ができないか
人工知能に何ができないか
なおき きしだ
プログラマは何を勉強するか
プログラマは何を勉強するか
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
Javaプログラミング入門
Javaプログラミング入門
なおき きしだ
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
JavaOne2016報告
JavaOne2016報告
なおき きしだ
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
Rafael Dohms
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
なおき きしだ
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
Andere mochten auch
(20)
オブジェクト指向やめましょう
オブジェクト指向やめましょう
JavaOne報告2017
JavaOne報告2017
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
チームとプロダクトをぶっ壊した話
チームとプロダクトをぶっ壊した話
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
コードレビューのススメ
コードレビューのススメ
設計してますか?
設計してますか?
C#アプリの作り方入門
C#アプリの作り方入門
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
Cしゃーぷができるまで
Cしゃーぷができるまで
人工知能に何ができないか
人工知能に何ができないか
プログラマは何を勉強するか
プログラマは何を勉強するか
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
Javaプログラミング入門
Javaプログラミング入門
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
JavaOne2016報告
JavaOne2016報告
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
Mehr von Shunji Konishi
Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話
Shunji Konishi
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
Shunji Konishi
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
Shunji Konishi
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
MochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテスト
Shunji Konishi
SendGridサンプルの紹介
SendGridサンプルの紹介
Shunji Konishi
セキュリティの考え方
セキュリティの考え方
Shunji Konishi
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi
WebSocketでリアルタイムクイズアプリを作ってみた
WebSocketでリアルタイムクイズアプリを作ってみた
Shunji Konishi
Heroku tips1
Heroku tips1
Shunji Konishi
Playframework1でSeleniumテスト
Playframework1でSeleniumテスト
Shunji Konishi
Heroku Dyno再起動時の振る舞い
Heroku Dyno再起動時の振る舞い
Shunji Konishi
Dyno cycling behavior of Heroku
Dyno cycling behavior of Heroku
Shunji Konishi
Herokuで使えるRDBMS管理者ツール
Herokuで使えるRDBMS管理者ツール
Shunji Konishi
Play1 to Play2
Play1 to Play2
Shunji Konishi
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
Herokuのログ解析ツール
Herokuのログ解析ツール
Shunji Konishi
Excel2 canvas
Excel2 canvas
Shunji Konishi
特盛!Heroku
特盛!Heroku
Shunji Konishi
文字コードのお話
文字コードのお話
Shunji Konishi
Mehr von Shunji Konishi
(20)
Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
MochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテスト
SendGridサンプルの紹介
SendGridサンプルの紹介
セキュリティの考え方
セキュリティの考え方
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
WebSocketでリアルタイムクイズアプリを作ってみた
WebSocketでリアルタイムクイズアプリを作ってみた
Heroku tips1
Heroku tips1
Playframework1でSeleniumテスト
Playframework1でSeleniumテスト
Heroku Dyno再起動時の振る舞い
Heroku Dyno再起動時の振る舞い
Dyno cycling behavior of Heroku
Dyno cycling behavior of Heroku
Herokuで使えるRDBMS管理者ツール
Herokuで使えるRDBMS管理者ツール
Play1 to Play2
Play1 to Play2
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Herokuのログ解析ツール
Herokuのログ解析ツール
Excel2 canvas
Excel2 canvas
特盛!Heroku
特盛!Heroku
文字コードのお話
文字コードのお話
Kürzlich hochgeladen
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
2024 03 CTEA
2024 03 CTEA
arts yokohama
Kürzlich hochgeladen
(11)
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
2024 04 minnanoito
2024 04 minnanoito
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
2024 03 CTEA
2024 03 CTEA
良質なコードを高速に書くコツ
1.
株式会社FLECT 小西俊司 2014/02/27
2.
大袈裟なタイトルは釣りです。(^^; 僕が他人のコード(主にFLECT社内)を見る時に気に なる点のひとつを、文書化しただけで、そんなたいし た話はないのであまり期待しないように
3.
良いコードを書くための方法論は最終的にはすべて 「一度に考えなければならないことの量を減らす」こと によって目的が達成されていると考えます。 「オブジェクト指向」「分割統治」などは良い例で、これ らの方法論を使うとその部分以外のことを考えなくて 良くなるわけです。 逆にいわゆる「スパゲティ化したコード」とは一度にあ れもこれも考えなくてはならなくて訳がわからなくなっ た状態を指します。 これを踏まえてコードを書く時に意識して欲しいこと は。。。
4.
ことです
6.
開発者が考えなければいけないことには ◦ ◦ ◦ ◦ ◦ アプリの要件 アプリの実装 インフラ ストレージ など様々なレイヤがある これらは俯瞰で考えなければいけない時もあるが、全部 いっぺんに考えるのは無理なので基本的には別々に考え る(別の人が考える場合もある) コンテキストスイッチとはここで考えることのレイヤが切り 替わること ◦ これは人間にとってコストの高い処理
7.
AならばB BならばC すなわち、AならばC これは常に正しい が、この考え方は往々にしてコンテキストをまたぐ 特にフロントエンド開発(jQuery+JavaScript)ではコ ンテキストスイッチが発生しやすい
8.
アプリ要件 ◦ 情報量の多いテーブルの一部の表示/非表示をボタンで切 り替えたい ◦ データが切り替わった時には非表示 実装 ◦
jQueryで楽勝!
9.
$("#btn-toggle").click(function() { var opened
=$("#table").find(".view-toggle").toggle().is(":visible"); $(this).text(opened ? "閉じる" : "開く"); }); $("#btn-exec").click(funtion() { $.ajax({ "url" : ... "data" : { ...}, "success" : function(data) { var $table = $("#table"); $table.find(".data-name").text(data.name); //ここにデータ設定のコードが並ぶ $table.find(".view-toggle").hide(); } }); });
10.
簡潔な記述なので、コード自体はそんなに悪くない しかしこのコードを書くためにはアプリ要件を考えてい る時にHTMLとJavaScriptの間を行ったり来たりしな ければならない ◦ HTMLとJavaScriptの行き来でもコンテキストスイッチは発生 する コードを読み書きする時に何度もコンテキストスイッチ が発生して、疲れる
11.
まず、アプリ要件だけを先に全部書く //Tableオブジェクト function Table($table) { //中身は後で書くのでとりあえず空 } var
table = new Table($("#table“)); $("#btn-toggle").click(function() { table.toggle(); $(this).text(table.isOpened() ? "閉じる" } $("#btn-exec").click(funtion() { $.ajax({ "success" : function(data) { table.apply(data); table.close(); } }); }); : "開く"); まだTableオブジェクトの メソッドを1行も書いてない うちから「toggle」「apply」 などのアプリ要件を実現する メソッドを記述する (関数宣言だけは先に書く場合 もある)
12.
//Tableオブジェクト function Table($table) { function
toggledRows() { return $table.find($(".view-toggle"));} function isOpened() { return toggleRows().is(“:visible");} function open() { toggleRows().show();} function close() { toggleRows().hide();} function toggle() { toggleRows().toggle();} function apply(data) { $table.find(".data-name").text(data.name); ... } $.extend(this, { 要するにオブジェクト指向的な実装をすると “isOpend" : isOpened, いうことだがコンテキスト境界が明確になる "open" : open, ことが大事 "close" : close, "toggle" : toggle, 関数をローカルに宣言して$.extendで公開 "apply" : apply するやり方は単に小西の好みなので普通に } prototypeでやっても良い }
13.
アプリ要件を考える時に使う用語がそのままメソッドになっ ている ◦ テーブルを開く ->
open ◦ テーブルを閉じる -> close ◦ テーブルが開いていたら -> isOpened jQueryで1行でできることでもアプリ要件の用語でメソッド 定義することが重要 ◦ セレクタがでてくるとそこでコンテキストスイッチが発生する オブジェクトの実装とアプリ要件のコードはどちらを先に書 いても良い ◦ ていうかオブジェクトを先に書く方が一般的かも。。。 ◦ 慣れてくるとアプリ要件を先に書く方が楽。 Backbone等のフレームワークを使うという解もある ◦ しかしこれができるようになるとあまり必要を感じなくなる
14.
コンテキスト境界を意識してコンテキストをまたぐ場合はメ ソッドを切る jQueryはHTMLとの結びつきが強いのでアプリ要件を考 えるところは分離する ◦ オブジェクト指向はそのための有効な手段 サーバサイドや他のところでも考え方は同じ。大事なのは 以下の2つ ◦ 一度に考えなければならない事柄を減らす ◦
コンテキストスイッチの回数を減らす オブジェクト指向的なJavaScriptの書き方が良く分からな い人はこれも併せて読もう(宣伝) http://www.slideshare.net/shunjikonishi/ajaxapp-20725783
Jetzt herunterladen