Warning: session_save_path(): Cannot change save path when headers already sent in /home/yqual/s-yqual.com/public_html/s-yqual/public/yqual/wp-content/themes/yqual/session.php on line 2

Warning: session_start(): Cannot start session when headers already sent in /home/yqual/s-yqual.com/public_html/s-yqual/public/yqual/wp-content/themes/yqual/session.php on line 3

Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in /home/yqual/s-yqual.com/public_html/s-yqual/public/yqual/wp-content/themes/yqual/session.php on line 5
プログラミング

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

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ポケモン「バトルシステム編 〜バトル終了判定〜」28
プログラミング
JavaScript,jQuery,PHP,PHPポケモン,ポケモン
PHPポケモン「バトルシステム編 〜バトル終了判定〜」28

バトル終了判定 今回はバトル終了判定を実装しましょう。今までは「にげる」による戦闘離脱のみで、ひんし状態でも殴り合うことが出来たので、それを解消するためにも戦闘結果による判定を導入します。   ひんし状態の監視 まずは「ひんし」の監視です。現在は交代ポケモンどちらか一方がひんし状態になれば、そ...

【配列とは】初心者が最短でPHPを使えるようになるための実践的な学び方
プログラミング
foreach,PHP,配列
【配列とは】初心者が最短でPHPを使えるようになるための実践的な学び方

  初心者の方、今からプログラミングを始める方、HTMLとCSSの領域から抜け出せない人たちを対象にした、PHPをできるだけ使えるようになるための方法を紹介するコーナー。 栄えある第二回は【配列編】です。   第一回を飛ばしてこのページへに来てしまい「変数って何?」というレベルの人は、第一回の【変数編...

PHPポケモン「バトルシステム編〜HP計算〜」26
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「バトルシステム編〜HP計算〜」26

HP計算 これまでに実装したダメージ計算ですが、計算はできていてもお互いに相手ポケモンのHPを削ることはできませんでした。なので、今回は実際のバトルのように、HPに対してダメージを与えるという仕組みを作成していきます。   残りHP ここで必要になるのが「残りHP」という概念です。今までステータス上のHP...

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

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

オブジェクト指向有効活用編 PHPポケモン 93
プログラミング
PHP,PHPポケモン,ポケモン
オブジェクト指向有効活用編 PHPポケモン 93

オブジェクト指向の有効活用 β版に向けたPHPポケモンの構成見直し、今回は「オブジェクト指向」の役割について、より理解を深めつつ、保守性も良くなるように整えていきます。   機能を持たせる 様々なプロパティを定数や静的変数へ以降していますが、今回は「静的メソッド」の活用範囲を増やしていきます。まず...

かなしばり編 PHPポケモン 95
プログラミング
PHP,PHPポケモン,ポケモン
かなしばり編 PHPポケモン 95

かなしばりとは 最近は技のアップデートをおろそかにしていたので、久々の追加実装です。へんしんという再現が面倒な技は乗り越えましたが、他の技も仕様がややこしいため、覚えるポケモンが用意できたタイミングに基本的に増やしていきたいのですが、バトルシステムを作り上げていく関係上、どうしても見逃せない部...

モンスターボール作成編 PHPポケモン 79
プログラミング
PHP,PHPポケモン,ポケモン
モンスターボール作成編 PHPポケモン 79

モンスターボールとは ポケモンのゲームにとっての楽しみの1つである「バトル」はある程度実装できてきましたが、もう一つ無くてはならない楽しみがあります。それが「ポケモンを集める」というコレクター要素です。 そして、ポケモンを捕まえるために欠かせない道具の1つが「モンスターボール」です。  モンス...

初心者必見!仕事がデキる人のIllustrator活用術3選
デザイン
Adobe,Illustrator,サムネイル
初心者必見!仕事がデキる人のIllustrator活用術3選

  仕事の速い人の大半は、「効率の良い方法」や「便利な使い方」を知っていて使いこなしています。これは、デザインの現場でも同じです。 今回はその中でもIllustratorで知っておくと便利な機能を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 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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力