30歳 独学で始めるプログラミング ~WEBデザイン・アプリ開発~

ITスキルに興味がでたので、codeを書いてみたら面白くてハマってしまいました!日々何をやったのかを中心に、記事を書いていきたいと思います。

独学での閃き~その2~ PHP【01】+ Progateという学習コンテンツのと上手な付き合い方について

<カテゴリ>

プログラミング・WEBデザイン

<言語>

PHP

<閃き>

PHP言語を使用する目的

<結論>

オブジェクト指向の本質を掴もう!

<コツ>

最終的な絵姿を考えて「超ざっくりした機能ごとのフレーム」に分解して、おおまかな情報の流れをラフスケッチする

 

<閃き詳細>

今回はPHPの学習を進める中で、そもそも「なんでコンストラクタで引数で受けた値を、クラスの変数にセットするのか」という疑問から、「PHP言語はこういう目的でうまれたのかな」ということを考察して、以下のとおり整理してみました^^

 

正しいかどうかは置いておいて、私はこの枠組みでPHPを見るようにしたところ、1つ1つのcodeの意味や役割をある程度明確に認識することが出来て、理解が深まったと感じています!

 

では、具体的なcodeも記載しながら、枠組みを見ていきたいと思います。

 

 

・コンストラクタで引数で受けた値をセットする理由について(オブジェクト指向の全体的な枠組みとは)

 

あくまでクラスで作っているのは「枠」であって、インスタンスを作成して初めてデータとしての形をもつ、ということを意識する。

 

すると、インスタンスを作成したときに、クラスの枠をもとに、具体的なデータを当てはめていくことになる。

 

このデータの当てはめをコンストラクタを使って自動でやると、きれいなプログラムとなる。

 

さらに一歩踏み込んで、オブジェクト指向の大きな枠組みを考えると以下のとおりとなる。

 

①クラスで枠を作成して、引数でインスタンスで指定したデータを即格納できる形にしておく

②各インスタンスごとに、引数に渡せるデータを格納した形で全て定義する。

③各インスタンスを配列として1つにまとめておく

④実際のHTMLのcodeの中に、PHPの記述でforeach関数を使用して、各インスタンスを1つにまとめた配列を呼び出して、全てのデータ処理を一括で実行する。

⑤④の「全てのデータに一括でアクセス」出来る中で、条件文を組み合わせて、必要なデータを抽出する。

 

具体的には以下のようなcodeとなる。

 


class Men {
private $name;
private $age;
private $height;
}

public function __construct($name, $age, $height){
$this->name = $name;
$this->age = $age;
$this->height = $height;
}

 


$ken = new Men(Ken, 29, 175);
$john = new Men(John, 17, 189);

 


$men = array($ken, $john, …)

 

④⑤
<?php foreach($men as $man): ?>
<?php echo $man->name ?>⇐必要ならこの中でif文やfor文などで条件分岐していく
<?php endforeach ?>


最終的に完成する、上記の流れを把握しておかないと、①の時点でのコンストラクタで引数で受けた値をセットする意味なんて理解しようがないから、よくよく全体の流れを考えることが肝要。

 

もしかしたらかなり当たり前のことかもしれませんが、自分としてはここを意識することが学習効果の向上につながったので、メモとして残しておきます^^

 

 

<補足~Progateという学習コンテンツのと上手な付き合い方について~>

 

Progateの学習単元全般に言えることではあるのですが、「全体的な構成についての本質的な解説が薄い」ような気がします。

 

Progateの目的が「プログラミング学習の障壁を最大限なくす」ことなので、まずは自分の書いたcodeが「正しく動いた!」という成功体験を提供するのは仕方がないとは思いますが、各単元の最後であったり、各言語の最後に「中まとめ」「大まとめ」のような形で、本質的な解説を入れてもいいのではないかというのが正直な感想です。

 

でないと、Progateはこなすことが出来たけど、実際にプログラミングは出来ない人を量産することになる気がするからです。

(かくいう私もその点は不安ですので、他のコンテンツや自身のポートフォリオを作ったりでカバーが必要かなと考えています)

 

で、Progateで学習を進めていくなかで「細かい指示通りにとりあえずcodeを書く」だけだと、「結局これなんでこうなってるの?」と自問自答せざるを得ない状況になります。

 

そんなときは、「なぜこの言語は生まれたのか」という目線で、単元を通じて作成したcode全体と完成品とを観察してみるといいかもしれません。

 

正しいかどうかは置いておいて、全体的な構造が見えやすくなりますし、ある程度的を射た考察が出来れば、1つ1つのcodeに確かな役割を感じることが出来て、ぐっと理解が進むと思うからです。

(このぐっと理解が進んだ瞬間を、人は閃いたと感じるものと考えています^^)

 

30日以上Progateで複数言語を勉強してきた中で、この学習コンテンツとの上手な付き合い方を模索してきたので、補足にて私の考えをコメントしました。