プログラミング

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

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という順に学んでいくひとが多いでしょう。 私も実際に、似たような手順で学んでいきました。   ...

 

注目の記事

お金を稼ぐためは理解しておきたい基本的な3要素【お客さんを増やす前に知っておかなければならないことって?】
マーケティング
お金を稼ぐためは理解しておきたい基本的な3要素【お客さんを増やす前に知っておかなければならないことって?】

  お客さんを増やすためにはどうすればいいんだろう?   ビジネスをやっている人で儲かっている一部を除けば、誰もが抱いている共通の悩みですね。 ですが、ただお客さんを増やすために安易な広告を打ったりするのは、実は危険なことなんです。   今回は「お金を稼ぐためには理解しておきた...

ゆびをふる編 PHPポケモン 69
プログラミング
PHP,PHPポケモン,ポケモン
ゆびをふる編 PHPポケモン 69

ゆびをふるとは 今回PHPポケモンで実装する技は「ゆびをふる」です。  ゆびをふる(ポケモンwiki) https://wiki.ポケモン.com/wiki/ゆびをふる   「ゆびをふる大会」というゆびをふるのみを使った大会なども開催されているということもあり、ポケモンの技の中でも初代から長く愛されてきた1つです。で...

フリーランスのための値段交渉術!案件はこうやって見極めろ
フリーランス
フリーランスのための値段交渉術!案件はこうやって見極めろ

  「これもっと安くならない?」 「他の人はこれぐらいの金額でやってくれるよ」   こういった値切り交渉を受けたことがある人もいるのではないでしょうか?技術を提供するフリーランスであれば、金額を落とすということは自分の価値を下げているということを理解しておかなければなりません。 値段交渉...

これをしてはいけません!「よくわかるSEO対策」エンジニアのための基礎知識編
SEO対策
htaccess,HTML,JavaScript,SEO,エンジニア,プログラミング
これをしてはいけません!「よくわかるSEO対策」エンジニアのための基礎知識編

  近年ではWebサイト制作会社や個人事業主はかなり増えてきました。 会社によっては力を入れている部分は異なり、主に「デザイン」「機能(システム)」「SEO」という3つに分けられます。 飽和しているのでは無いかと囁かれている中、この3つすべてを揃えた事業者は意外と少なく、個人となれば更に少なくなります。...

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

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

プレイヤー情報作成編 PHPポケモン72
プログラミング
PHP,PHPポケモン,ポケモン
プレイヤー情報作成編 PHPポケモン72

プレイヤー情報の作成 少し前よりプレイヤーをホーム画面に表示させるようにしましたが、ただイメージとして配置しただけでプレイヤー情報自体は設定していませんでした。なので、今回はプレイヤーとして持たせる必要のある情報を作成していきましょう。   クラスの作成 初代ポケモンではプレイヤー情報として閲...

ひとのものをとったらどろぼう!編 PHPポケモン 99
プログラミング
PHP,PHPポケモン,ポケモン
ひとのものをとったらどろぼう!編 PHPポケモン 99

ひとの ものを とったら どろぼう! ポケモンの中でも有名なセリフの1つです。モンスターボールを投げることでポケモンを捕まえることができますが、既に別トレーナーが所有しているポケモンを捕まえることはできません。 初代から、トレーナー戦でモンスターボールを投げると「ひとの ものを とったら どろぼう!...

EC-CUBE4内にWordPressを設置(共存)する方法
SEO対策,プログラミング
EC-CUBE4,PHP,Symfony,Twig,WordPress
EC-CUBE4内にWordPressを設置(共存)する方法

今回使用したバージョン EC-CUBE4.0.5 WordPress5.6 ※EC-CUBE4、WordPressのカスタマイズは自己責任でお願いします。また、現在稼働中のサイトで試す際には、必ずバックアップを取ってから行なうようにしてください。   EC-CUBE4とは ネットショップを作るとなれば、様々なサービスが出回っ...

カテゴリ

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

タグ

5G Adobe AfterEffects AI ajax amazon Animate api artisan atom Automator AWS Bluetooth CSS CVR description EC-CUBE4 ECショップ ESLint Facebook feedly foreach function Google Google AdSense Honeycode htaccess HTML IEEE 802.11ax Illustrator Instagram IoT JavaScript jQuery jQuery UI keyword LAN Laravel Linux MacBook MAMP meta MLM MySQL NoCode note OS OSI参照モデル Paypal Photoshop PHP phpMyAdmin PHPポケモン PremierePro rss SEO 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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力