プログラミング

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

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ポケモンの大幅見直しを迫られているわけではありません。   毎日継続するために  ブログや学習など、毎日継続...

反動技編(はかいこうせん・とびひざげり)PHPポケモン40
プログラミング
PHP,PHPポケモン,ポケモン
反動技編(はかいこうせん・とびひざげり)PHPポケモン40

反動技とは ポケモンでは反動技というものがあります。反動によっても様々で、現在の仕組みのままでも実装可能なものや、新たに処理が必要なものまであります。なので、一律で反動技という同じ処理は出来ません。  反動技(ポケモンwiki) https://wiki.ポケモン.com/wiki/反動技 反動技(はんどうわざ...

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

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

SEが心がけるべき3つの習慣
プログラミング
Automator,JavaScript,エンジニア,システムエンジニア,プログラマー,プログラミング
SEが心がけるべき3つの習慣

  ネット社会、在宅ワークが主流になってきた今、SEという仕事に憧れを頂いている人は多くなりました。 単価の良さも、魅力の一つです。そして、技術が普及してきたことにあわせて、便利なソフトやアプリが簡単に手に入るようになり、一昔前と比べると技術の習得も容易になりました。   しかし、多くの人が...

PHPポケモン「オートローダー編」16
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「オートローダー編」16

  今までは技やタイプを一括requireという荒業で対応していましたが、フシギダネ系列の技を実装した際に「こんなん全部読み込んでられるか!」と流石になったので、簡易ながらオートローダーを実装していきます。 そして、実装したらしたで色々と問題も浮かび上がってきたので、このあたりは回を進めて行きなが...

システムエンジニア向けまとめ情報サイト IT News Checker
ネットワーク
システムエンジニア向けまとめ情報サイト IT News Checker

新年のスタートダッシュが遅れ気味に見えるかも知れませんが、年末からじっくりと作業を進めており、やっとある程度形になりました。 師走の如く作業に走り、気分転換に雪遊びもしつつ、成人式を終えた辺りでリリースしたのが「IT News Checker」です。   IT News Checkerとは 簡潔に説明すると、まと...

挫折してしまう人に共通する3つの要因〜解決方法を紹介します〜
雑記
挫折してしまう人に共通する3つの要因〜解決方法を紹介します〜

  仕事が上手くいかない 思ったように学習成果がでない   こういった理由で挫折してしまう人は、意外にも考え方や行動が共通しています。 それが何かを知り、考え方や環境、対応方法を少し変えるだけで、劇的に余裕が生まれて自己肯定ができるようになります。その結果、強い人になれるのです。   今...

TwitterでYouTubeのリンク付きサムネイルを表示させる方法【超実践的Webプログラミング活用法】
プログラミング
HTML,JavaScript,PHP,Twitter,YouTube
TwitterでYouTubeのリンク付きサムネイルを表示させる方法【超実践的Webプログラミング活用法】

  Twitter(ツイッター)をブログや商品、イベントの宣伝目的で使用している人は多いです。そして、そのためのマーケティング方法や戦略は数多く練られています。 今回は、その中でもYouTubeの告知をするために特化させた内容をまとめました。   一般的な方法と、プログラミングの知識(HTMLやJavascript等)があ...

カテゴリ

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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力