CodeIQ中の人、millionsmileです。 PHPメンターズの後藤秀宣さん出題の『オブジェクト指向的FizzBuzz』問題の解説記事です! PHPは、開発言語別の求人数ランキングで2位であります(出典)。さらには、PHPが書けてオブジェクト指向がわかるエンジニアへの企業ニーズは高いものの、実際は、まだまだ層が薄いということもあり、今回の出題へ、となりました。 ぜひ解説記事を読んで、イケてるオブジェクト指向がわかるPHPエンジニアをめざしてみてはどうでしょう。 以下、問題文です。 FizzBuzz問題を解くアプリケーションを実装しているとします。 ★FizzBuzz問題とは? 1, 2, 3, ・・・という入力に対して3で割り切れる場合は「fizz」、5で割り切れる場合は「buzz」 3でも5でも割り切れる場合は「fizzbuzz」、それ以外は数値をそのまま出力する PHPコードは次
あわせて読みたい 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い あきらめるにはまだ早い!ソースコードの品質向上に効果的なアプローチ 2015年に備えて知っておきたいリアクティブアーキテクチャの潮流 この記事について この記事は新人向けの研修内容を再編集してお送りいたします。 ここで述べる内容はどのようにして現在のプログラミングスタイルが生まれてきたかを理解することで、よりよいプログラムを書くためのもので、正確なソフトウェア工学の歴史を学ぶためのものではありません。正確な歴史を把握したい場合は、原典をあたるようにしてください。 また、想定している読者は「よくあるオブジェクト指向プログラミングの学習」を既にし
正しく意味を理解している方にとっては、まったく常識レベルの話であり、何をいまさらと思われる方々も多いかと思いますが、大規模案件のレガシーコードなど、私が仕事で見かけるJavaのコードを読むと、「このコードを書いたSEやPGの方々は、はたして継承の意味を正しく理解していないのではないか」と思われる設計のコードに出会うことが少なからずあります。現在では改良されましたが(Javaプログラミング能力認定試験の問題がかなり改善されていました - 達人プログラマーを目指して)、以前のJavaプログラム認定試験の問題は、そうした不適切な設計がされている典型的な例となっていたのですが、実際、SI業界ではあのような品質のコードのシステムが今でも現役で多数稼動しているというだけでなく、現在でも新たに生み出されているというのは残念ながら紛れもない事実のようなのです。 確かに新人研修で「哺乳類を継承して犬クラスと
今回は、パターンを1つだけ紹介します。「Mediatorパターン」です。GoF本では、それぞれのパターンの「目的]「背景」「効果」などが明示されています。私も、ちょっと真似をしてみましょう。複数のオブジェクトを組み合わせてプログラムの機能を実現するという目的において、オブジェクト間の関連がゴチャゴチャになってしまうという背景(問題)があり、Mediatorパターンの採用によって関連をキレイに整理できるという効果があります。説明だけでは、何のことだかわからないと思いますので、具体例をお見せしましょう。 図1[拡大表示](1)をご覧ください。これは、UML(Unified Modeling Language、ユーエムエル)と呼ばれる表記法で記述されたプログラムの設計図です。UMLでは、四角形の中に下線付きで名前を書いてオブジェクトを表し、関連のあるオブジェクトを矢印で結んで示します。ここで関連
この文章について OOP(オブジェクト指向プログラミング、オブジェクト指向パラダイム)について プログラミング勉強中の大学生さんに説明する機会が何度かあったので、 自分の中で整理するために書きました。 中には適切でない説明もあります。ばっさり省いているところもあります。 詳細より イメージを掴んでもらうことを優先しているためです。 「それにしてもあんまりだなー」という表現がありましたらご連絡いただけると嬉しいです。 大学生さん 大学生さんたちはいろんな背景を持っています。 プログラミングを始めたばかりの人 独学で Objective-C や JavaScript を書いた経験がある人 Web やコンピュータの仕組みについてもこれから勉強する予定の人 使用言語 大学生さんたちはプログラミングの第一歩として JavaScript と PHP を使っています。ここでは説明に PHP のコードを使
毎日書く普通のコードでなるべくミスを減らし、デバッグを簡単にして、より多くの時間を楽しい事(キーボード叩いたり汎用関数作ったりリファクタしたり)に費やしたくて最近実践していることをメモします。一つ前の燃えてるエントリの補足(不変指向の利点の説明)も兼ねているので話があっちこっちぶれてしまいました。 順番への依存を減らす 「Xを実行してからYを実行するとおかしくなる」*1とか「Yを安全に実行する前には必ずZを実行しなければいけない」*2とかは絶対にミスるのでなるべくなくす。後者についてはラッパを作ってその中でアトミックに実行するとかで解決できるけど、前者はミュータブルなもの(オブジェクト)を使っている限り至る所で発現し、根本的な解決は困難。以降のセクションで関数型の考え方を取り入れてこれを解決していきます。 状態を減らす 多くのプログラムは状態を持ちます。ある関数のようなものにプログラム中さ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く