プログラミング

【脱初心者向けプログラミング学習】処理を追え!「今、変数には何が入ってる?」

HTML PHP プログラミング学習
【脱初心者向けプログラミング学習】処理を追え!「今、変数には何が入ってる?」

 

初心者から中々抜け出せない

1から処理をかけない

 

そんな悩みを抱えたプログラミング学習者に向けて、「脱初心者のためのプログラミング学習」についてPHPを例にまとめました。

やり方自体は同じですので、他の言語をメインとしている人は自分の環境に置き換えながら学習して、初心者から抜け出しましょう。

 

最後まで読み、これが日頃からの習慣となれば、脱プログラミング初心者はすぐにやってくるはずですよ。

 

 

「コピペで動いた」は卒業しよう

 

ネットで調べてサンプルコードを貼り付けるだけでも動くようなプログラムは数多く存在します。もちろんそれで完成すれば問題ありませんが、プログラミングの技術をより実践レベルで身につけるのであれば、「コピペで動いた」というような初心者状態から脱却しなければなりません

そのためには、コードをじっくり読むことです。長いコードや知らない関数や記述が多いと読むこと自体を諦めてしまいがちですが、それではいけません。

最初は短いコードから挑戦して、徐々にコードを読む耐性をつけていきましょう。そうすれば、どこを触ればどのように変わるか、何故エラーになってしまうのかが見えてきます。

 

もしコピペで使用しているコードがあれば、一度その処理を最初から追いかけてみてください。そうすれば、必要のない処理に気づけたり、エラーの可能性を回避することにも繋がります。まずは上から1行づつ読んで、実際の動きに合わせて順番通りに読むようにしてみるのが良いでしょう。知らない関数や記法は、その都度調べることです。ここをサボってしまえば、結局は「今、何しているかわからない」という状態に陥ってしまい、結局はわからない処理を続けてしまうことになるからです。

 

 

変数の中身を理解する

 

今回はPHPで処理の読み解き方、変数の状況確認の手順をご説明します。

値は基本的に変数に入れてやり取りされます。お問い合わせフォームで送信ボタンを押しても、まずはグローバル変数の$_POSTにデータが入ります。最初はどんな状態になっているのか、10行目にはどうなっているのか、このように1行ずつどう変化しているのかを諦めずに追っていくことこそが大切なのです。

 

では、以下の処理を見てみましょう。

<?php
function shori($post){
              if(empty($post)){
                            return;
              }
              $ng_list = [
                            'name' => 'YQUAL',
                            'fruit' => 'りんご',
                            'fish' => 'いわし',
              ];
              $omake = [
                            'omake' => 'ケーキ',
              ];
              $result = array_diff($post, $ng_list);
              if( count($result) === 3 ){
                            $result = array_merge($result, $omake);
              }
              return $result;
}
?>

NGなければ「ケーキ」あげるよ
<form action="" method="post">
              名前:<input type="text" name="name" value=""><br>
              果物:<input type="text" name="fruit" value=""><br>
              お魚:<input type="text" name="fish" value=""><br>
              <input type="submit">
</form>

【結果】
<pre>
<?php var_export(shori($_POST)); ?>
</pre>

 

 

名前、果物、お魚を送信して、それぞれのNGワードがなければおまけにケーキをくれるというものです。どんなことに役立つかは気にせずいきましょう。

 

では、このプログラムはどのように動いているのかを、以下の点に注目しながら見ていきましょう。 

  1. 何を入れたのか
  2. 何が行われているのか

 

 

何を入れたのか(開始)

 

まず重要なのは何を入れたのか、という開始地点です。まず、上半分のPHPを見てみましょう。

<?php
function shori($post){
              if(empty($post)){
                            return;
              }
              $ng_list = [
                            'name' => 'YQUAL',
                            'fruit' => 'りんご',
                            'fish' => 'いわし',
              ];
              $omake = [
                            'omake' => 'ケーキ',
              ];
              $result = array_diff($post, $ng_list);
              if( count($result) === 3 ){
                            $result = array_merge($result, $omake);
              }
              return $result;
}
?>

 

2行目からshoriという関数が作られていますね。そして、カッコの終わりを追っていけば19行目まで続いているので、PHP部分はshori関数を定義しているということがわかります。

では、その関数がどこで実行されているのかを、下半分を見てみましょう。

NGなければ「ケーキ」あげるよ
<form action="" method="post">
              名前:<input type="text" name="name" value=""><br>
              果物:<input type="text" name="fruit" value=""><br>
              お魚:<input type="text" name="fish" value=""><br>
              <input type="submit">
</form>

【結果】
<pre>
<?php var_export(shori($_POST)); ?>
</pre>

 

11行目のPHP部分にshoriという記述があります。ここが発火地点ですね。

<?php var_export(shori($_POST);); ?>

 

var_exportは受け取った値をHTML上に出力するために使っています。囲っているpreタグは出力されたコードを行替えしてくれるので、可視性を良くするために使っています。

 そして、shori関数には引数がついています。関数を定義する2行目にあるshoriの後ろのカッコ内に入れている$postです。

shori関数を発火させる時には、$_POSTという変数をセットしていますね。これはグローバル変数ですので、コード内で宣言されていなくても使用することができます。

 $_POSTにはPOSTフォームで送信した値が配列でセットされるので、データを送信していない状態では「array()」になります。

 

では、以下のように入力して送信を押せば、どういった値が入るのか見てみましょう。

 

$_POSTの中身
array (
  'name' => 'YQUAL',
  'fruit' => 'みかん',
  'fish' => 'たい',
)

 

shori関数に引数としてセットしている$_POSTの中身は上記のようになっています。これがセットした最初の値になります。

 

 

何が行われているのか(処理)

 

関数にセットした$_POSTの中身がどうなっているかわかりました。

次は、shori関数内でどういった処理が行われ、それぞれの変数には何が入れられているのか、どういった処理がされているのかを追っていきましょう。

<?php
function shori($post){
              if(empty($post)){
                            return;
              }
              $ng_list = [
                            'name' => 'YQUAL',
                            'fruit' => 'りんご',
                            'fish' => 'いわし',
              ];
              $omake = [
                            'omake' => 'ケーキ',
              ];
              $result = array_diff($post, $ng_list);
              if( count($result) === 3 ){
                            $result = array_merge($result, $omake);
              }
              return $result;
}
?>

 

3行目を見てみましょう。

if(empty($post))

 

if文で条件分岐を行っています。その条件式はempty($post)ですね。

$postには引数として受け取った値が入っているので、shori関数を発火した時点での$_POSTの値ですね。emptyは空かどうかを判定するために使われるので、$post$_POST)の中身が空かどうか確かめています。

【PHP公式マニュアル】empty

 

初期状態の$_POSTは空配列のため、この条件に一致します。そのため、if文の中に書かれたreturnという処理が行われ、関数が終了します。

returnで戻り値をしていないので、この場合shori($_POST)の結果はnullとなります。

 

 

初期状態通りですね。 

emptyで確認した結果、空でなければ次の処理に進みます。なので、先程と同じ値を送信してみましょう。

array (
  'name' => 'YQUAL',
  'fruit' => 'みかん',
  'fish' => 'たい',
)

 

$postの中身が空では無くなったので、3行目のif文はスキップして次の処理に移ります。

次は$ng_listという変数に配列をセットしています。変数名の通り、ここで配列として設定されているものが各値のNGワードです。今回であれば名前(name)で送信したYQUALが該当しますね

$ng_list = [
'name' => 'YQUAL',
'fruit' => 'りんご',
'fish' => 'いわし',
];

 

次は$omakeという変数に配列がセットされています。これが、NGが無かった際にくれる「ケーキ」のようです。

$omake = [
'omake' => 'ケーキ',
];

 

では次の14行目の処理を見てみましょう。

$result = array_diff($post, $ng_list);

 

$resultという変数に、array_diff($post, $ng_list)の結果を入れています。

array_diffという関数は、配列の引き算のようなものです。引かれる対象が第一引数の$post、その判定にしようされる配列が第二引数にセットされている$ng_listになります。

【PHP公式マニュアル】array_diff

 

$post$ng_listで一致しているものは、「‘name’ => ‘YQUAL’」なので、array_diffの結果では排除され、その値が$resultへセットされます 

15行目の$resultの中身
array (
  'fruit' => 'みかん',
  'fish' => 'たい',
)

 

では15行目の処理を見てみましょう。

if( count($result) === 3 )

 

if文で条件分岐をしています。countという関数に配列をセットした場合は配列内の要素数を計算してくれます$resultの配列にはfruitに「みかん」と、fishに「たい」の2つです。

条件式では===で配列内の数と3が一致しているかどうかを確認しています。

 

今回は1つNGワードがあり、15行目の段階では配列内に要素が2つしかありませんので、if文内の処理はスキップされて18行目へ移動します。

return $result;

 

returnの後ろに値をセットすることで戻り値とすることができます。32行目のvar_exportには戻り値としてセットされた$resultの中身が返ってくるので、結果は以下の通りです。

 

 

では、次はNGワードを回避するために、名前を「すみれ」にして送信してみましょう。

 

 

それでは14行目の処理をみてみましょう。

$result = array_diff($post, $ng_list);

 

最初に$resultの変数に値をセットしたポイントです。$postの中身と$ng_listの中身で一致するものがないため、array_diffの関数の結果は$postと同じになります。

array (
  'name' => 'すみれ',
  'fruit' => 'みかん',
  'fish' => 'たい',
)

 

次に15行目の処理です。

countの結果、配列の中身に3つの要素が見つかったのでが返ってきます。===のチェックでと一致したので、16行目のif文内の処理が実行されます。

$result = array_merge($result, $omake);

 

array_mergeの関数では、引数にセットされた配列を合わせることができます。$resultに入っている関数と、$omakeに入っている「’omake’ => ‘ケーキ」の配列を合わせた結果は以下の通りです。

array (
  'name' => 'すみれ',
  'fruit' => 'みかん',
  'fish' => 'たい',
  'omake' => 'ケーキ',
)

 

上記の配列が$resultへ新たにセットされます。これでif文内の処理は終わり、最後のreturn $resultで、おまけのケーキが追加された配列が返されます

 

無事おまけのケーキが追加されました。

このように、1行ずつ分解して見ていき、その都度変数の中身がどうなっているのか、どういった処理がされているのかを理解していくことが大切です。わからない関数や記法で書かれていたり、長文にもなるプログラムは読むのが大変ですが、自分が動かしているものであれば1つずつゆっくりと処理を追っていくことです。

 

 

まとめ

 

いかがだったでしょうか。

今回は「脱初心者のためのプログラミング学習」について、処理の追い方をご紹介しました。

現在Webプログラミング学習に取り組んでいたり、実務でPHPを使う機会がある人は、ぜひ参考にしてみてくださいね。

【変数とは】初心者が最短でPHPを使えるようになるための実践的な学び方 【変数とは】初心者が最短でPHPを使えるようになるための実践的な学び方

  ※PHP初心者へ向けた内容となりますので、ある程度HTMLの知識がある方を対象とした内容になります。予めご了承ください。    Webプログラミングを学ぶ方はHTML、そしてCSSを学び、そしてJavascriptやPHPという順に学んでいくひとが多いでしょう。 私も実際に、似たような手順で学んでいきました。   ...

 

注目の記事

PHPポケモン「状態異常編〜まひ〜」23
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「状態異常編〜まひ〜」23

  今回のPHPポケモンでは「状態異常」を導入します。バトルシステムにも関係してくる部分ですが、それ以外にも影響を与える部分が多く、且つ非常に判定がややこしく、作り込む必要があったため1つずつ片付けていきます。   状態異常の実装  ポケモンの除隊異常に該当するものは以下の7通りです。 ...

データ軽量化編 β版へ向けて  PHPポケモン 90
プログラミング
PHP,PHPポケモン,ポケモン
データ軽量化編 β版へ向けて PHPポケモン 90

β版の実装に向けて 大型アップデートにより、ある程度機能改善や実装箇所も増えてきましたが、それと同時に次の段階への移行が本格的に見えてきました。それがβ版です。   PHPポケモンは2020年12月現在α版となっており、完全な試作段階のWEBアプリケーションです。セーブ機能はなく、セッションの有効期...

ピカチュウから学ぶオブジェクト指向 〜進化編〜 7
プログラミング
PHP,PHPポケモン,オブジェクト指向,ポケモン
ピカチュウから学ぶオブジェクト指向 〜進化編〜 7

  ※前回(第6回)で意味不明な場所に空変数が入っており、ステータスが一部しか出力できないという問題がありました。修正しています。犯人は「$stats = [];」です。(GetTrait.php)   今回はポケモンのゲームでは欠かせない、楽しみの一つとなる「進化システム」を導入していきます。これからPHPポ...

【脱初心者向けプログラミング学習】処理を追え!「今、変数には何が入ってる?」
プログラミング
HTML,PHP,プログラミング学習
【脱初心者向けプログラミング学習】処理を追え!「今、変数には何が入ってる?」

  初心者から中々抜け出せない 1から処理をかけない   そんな悩みを抱えたプログラミング学習者に向けて、「脱初心者のためのプログラミング学習」についてPHPを例にまとめました。 やり方自体は同じですので、他の言語をメインとしている人は自分の環境に置き換えながら学習して、初心者から抜け出しましょ...

バーアニメーションの不具合対応編 PHPポケモン 54
プログラミング
PHP,PHPポケモン,ポケモン
バーアニメーションの不具合対応編 PHPポケモン 54

最近は細々した対応が多くて「早く次のステップに進めよ!」と思っている方も多いでしょう。 ご意見ごもっともですが、残っている対応が意外にも追加しなければいけない処理が多く苦戦しているのが実情だったりします。そして、そのおかげか試行回数が多くなり見過ごしていた不具合や修正不備がポロポロ出てきていま...

ネットワークとは【 第1回 ド素人のためのネットワーク講座】
ネットワーク
Wi-Fi,インターネット
ネットワークとは【 第1回 ド素人のためのネットワーク講座】

  身近なもの、普段から触れているものであっても、詳しく知らないものや、正しい理解が出来ていないものは多いですね。 その中の一つに「ネットワーク」というものがあります。   この講座は、一般的に言われる「コンピューター・ネットワーク」についてを説明していきます。 これからシステム関係の...

進化の石編(構成) PHPポケモン 102
プログラミング
PHP,PHPポケモン,ポケモン
進化の石編(構成) PHPポケモン 102

進化の石 ピカチュウさんもそろそろ進化したがっているので、β版の公開に向けて進化の石を実装していきます。しかし、イーブイなど特別な進化先や条件を持ったポケモンを考慮すると、少し実装が手間取りそうだったので、今回は構成部分のみのまとめとなっておりますので、ご了承ください。   アイテムクラスの作...

お金を生む仕組みを理解しよう【知っておきたい3つのポイント】
マーケティング
お金を生む仕組みを理解しよう【知っておきたい3つのポイント】

  どんなビジネスが儲かるのか・・・   一度はこういった悩みを持ったことがあるのではないでしょうか。 それを知るためには、どういった要素がお金を生むために作用しているのかを理解しておく必要があります。 今回は「お金を生む仕組み」について、知っておいてためになる基礎的な部分をわかりやすく...

カテゴリ

SEO対策 イベント デザイン ネットワーク ビジネスモデル フリーランス プログラミング マーケティング ライティング 動画編集 雑記

タグ

5G Adobe AfterEffects AI ajax amazon Animate api artisan atom Automator AWS Bluetooth CSS CVR description EC-CUBE4 ECショップ ESLint Facebook feedly foreach fortify function Google Google AdSense Honeycode htaccess HTML IEEE 802.11ax Illustrator Instagram IoT JavaScript jetstream jQuery jQuery UI keyword LAN Laravel Linux MacBook MAMP meta MLM MySQL NoCode note OS OSI参照モデル Paypal Photoshop PHP phpMyAdmin PHPポケモン PremierePro rss SEO Sequel Pro Skype SNS SSH Symfony TCP/IP title Toastr Trait Twig Twitter UCC V系 WAN WebSub Wi-Fi wiki Windows WordPress XAMPP xml Xserver YouTube YouTuber Zoom アーティスト アウトプット アクセス層 アニメーション アフィリエイト イーブイ インターネット インプット エンジニア オブジェクト指向 お金配り クリック単価 クリック数 コミュニケーション能力 コロナ コンサルティング サムネイル システムエンジニア スタートアップ スタイルシート スパム データベース ディープフェイク デザイナー デザイン テレワーク ナンパ ニュース ネットワークモデル ノマドワーク バナー ピカチュウ ビジネス フィード フリーランス ブロガー ブログ プログラマー プログラミング プログラミング学習 プログラミング教育 プロトコル ホームページ制作 ポケモン マークアップ マーケティング メール リモートワーク レンダリング 三井住友 三宮 仕事依頼 児童デイ 児童発達支援 公開鍵 初心者 助成金 勉強法 営業 広告 広告収入 必勝マニュアル 放課後等デイサービス 朝活 楽天 深層学習 無線LAN 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 認証 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力