プログラミング

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

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

 

注目の記事

プログラミングで躓く人必見!一人前になるためのSDCとは
プログラミング
プログラミング学習
プログラミングで躓く人必見!一人前になるためのSDCとは

  「プログラミング学習を始めたけど中々身につかない」 「挑戦したいけど何から始めればいいかわからない」   プログラミング教育が始まるとともに、プログラミング学習のニーズも日々高まってきています。ですが、興味はあっても中々挑戦までは至らなかったり、始めたは良いものの現実は厳しく躓いてし...

20代の独立が成功のカギ【学生→フリーランス・起業は危険です】
フリーランス
フリーランス,独立,起業
20代の独立が成功のカギ【学生→フリーランス・起業は危険です】

  終身雇用のほとんどが崩壊している今、学生の頃から独立や起業を考えている人は多いですが、安易な決断は危険です。 独立するには早すぎるのも良いとは言えず、また遅すぎることもそれなりにリスクです。 SNSやメディアでも学生起業などが騒がれていますが、それに影響されてしまうのはかなり危険なことです...

ゲームバランス調整編 DateTimeクラスの活用 PHPポケモン 101
プログラミング
PHP,PHPポケモン,ポケモン
ゲームバランス調整編 DateTimeクラスの活用 PHPポケモン 101

ゲームバランスの調整 まだまだ開発途中のPHPポケモンはゲームバランスの調整がほとんどされていません。現段階では機能も揃っていない関係上、完全なゲームバランスを求めて行くことにはあまり意味がありませんが、今後調整するための役割として機能自体は作成しておこうというのが今回の目的です。   トレーナ...

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

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

データベース定義は超重要!システム開発を始める前に知っておきたい構造と構成の考え方
プログラミング
MySQL,データベース,プログラミング学習
データベース定義は超重要!システム開発を始める前に知っておきたい構造と構成の考え方

  システムやアプリ開発をする場合、そのほとんどでデータベースを使用しますね。 それぞれのデータを連携させるためにも、その構造をどうするかは重要で、設計が甘ければシステムそのものの保守性はもちろん、想定していた仕組みを実現するのが難しくなることもあります。   今回は、これからデータベースを...

ノーコード開発で将来プログラミングは不要?我々は何を学ぶべきなのか
プログラミング
amazon,AWS,Honeycode,NoCode,プログラミング学習
ノーコード開発で将来プログラミングは不要?我々は何を学ぶべきなのか

  近年、プログラミングの需要は増え勢いを増していますが、それ以上にノーコードというソースコードを打たなくでもアプリ開発ができるというソフトウェアやプラットフォームが普及してきました。 これにより一部の期待感とは別に、プログラマーという職業は今後不要になるのではないかと危機感を抱く人が出て...

人に相談しても期待はするな【行動もどきって?成功する人と失敗する人の違いとは】
雑記
自己啓発
人に相談しても期待はするな【行動もどきって?成功する人と失敗する人の違いとは】

  「とにかく行動しろ」 「いろんな人に会え」 「どんどん外注しろ」   どれも覚えておきたい教訓ではありますが、その本質が見抜けなければ逆効果になります。 行動であっても、それが行動もどきになっている人は多く、人に会って人生が変わるということも受け身であれば全く意味がありません。外注に...

非公開ディレクトリ画像表示編 PHPポケモン 91
プログラミング
PHP,PHPポケモン,ポケモン
非公開ディレクトリ画像表示編 PHPポケモン 91

非公開ディレクトリの画像を表示する 今回は、β版に向けての取り組みの1つとして、表示させる画像のアクセス先を非公開ディレクトリに変更します。 現在は公開ディレクトリ(Public)内のAssetsフォルダ内に配置していますが、これをルート直下においているStorageに移動させるのが目的となります。   gifのbas...

カテゴリ

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