!empty、isset、!==nullの違い

今日はプログラミングの話題です。最近PHPで開発をしている時に奇妙な罠にハマってしまったのでまとめておきます。

 

0という値がnullだと判定された

開発の途中で変数が存在していたら、という条件分岐がありました。元のコードではif(!empty(変数))でこの判定をしていたのですが、変数の中身に0が入っている時に変数が存在していないとされてしまいました。原因はempty()関数は0をnullだと判定してしまう仕様でした。どうやらPHPは型の判定が曖昧で、数字や文字列としての0をnullとしてしまうようです。その対策を調べていると、同じような処理を行う方法が3つありました。

 

empty(変数)

変数が空であるかどうかを検査します。 変数が空であるとみなされるのは、変数が存在しない場合や 変数の値が FALSE に等しい場合です。 empty() は、変数が存在しない場合でも警告を発しません。

マニュアルを見てみると、emptyは変数が空であることを調べる関数のようです。しかし、この「空」の中には値が0や””の場合が含まれてしまいます。また、次のissetと違い引数の変数が存在しない場合でも警告が出ません。今回のように変数が存在しているかを調べる場合は!を前につけることで空でないときにtrueを出すようになります。

 

isset(変数)

変数がセットされており、それが NULL でないことを調べます。

変数が、unset() により割当を解除された場合、 何も値が設定されていない状態になります。 NULLに設定されている変数を調べた場合、 isset()FALSEを返します。 null文字("\0")はPHPの定数 NULLと等価ではないことにも注意してください。

複数のパラメータを渡した場合は、isset() はそれらすべてがセットされている場合にのみ TRUE を返します。 左から順に評価を行い、セットされていない変数があった時点で処理を終了します。

 issetは変数がセットされているかを調べる関数です。セットというのは変数が定義されていて、値が入っていることを指します。issetは変数の中身が0でも””でも値が入っていると判定します。しかし、引数の変数が定義されていない場合は警告を出してしまいます。

 

変数 !== null

これは変数がnullでないかを判定しています。変数が定義されていない、またはnullが代入されている場合にfalseを出します。PHPでは比較演算子が2つの場合は型を比較しません。よって0,”0”,nullはすべて同一のものとしてみなされます。比較演算子が3つになると型も比較するのでこれらは違うものとしてみなされます。

 

 

という訳で、今回は!==nullを使用しました。isset()が使えれば良いのですが、今回のコードでは判定する変数が定義されていない可能性があるので使えませんでした。もしisset()を利用するなら事前に変数が定義されているかを判定する必要があります。

自己分析って大事

今回は就活の話です。なぜ自己分析が必要なのかということについて、道徳の話をアレンジして説明していきたいと思います。

 

ある教師が生徒にゲームをさせました。まず生徒一人につき一枚の紙を配り、それを丸めさせました。次に今日卓の上にごみ箱を置き、生徒に丸めた紙をその場で投げ入れるよう言いました。教卓に近い生徒は、簡単にゴミ箱に紙を入れることができました。しかし、当然ながら後ろの席の生徒はゴミ箱に入れることができません。このゲームは明らかに不平等です。にもかかわらず、前のほうに座っていた生徒はそれを自覚していませんでした。特権とはそれを持っている人にとって当たり前のものなので自覚できないものなのです。

 

この話を少し拡張してみましょう。紙をゴミ箱に1つ入れるたびに1000円もらえるとします。この場合、前の席に座っている生徒と後ろに座っている生徒の利益を最大にする行動は何でしょう?二人とも自分で投げようとすれば、前に座っている生徒は確実に1000円をもらうことができますが、後ろに座っている生徒は何ももらえないでしょう。しかし、二人の利益を更に増やす方法があります。それは前の生徒が後ろの生徒から紙を500円で買うことです。前の生徒は紙さえあれば確実に1000円獲得できるので、500円で買ったとしても+500円の追加収入になります。後ろの生徒にとっては自分で投げて1円も入らないより500円で売った方が得です。前の生徒が持つ特権を後ろの生徒の分まで活かすことで二人とも得をすることが出来ました。これがビジネスです。

 

働くというのは自身の持っている強みを持っていない人の分まで活かすことで互いに得をするということです。そのためには自分の強みを把握する必要があります。ここで最初のゲームに戻ってみましょう。このゲーム、前の席に座っていた生徒は自分の特権に気がついていませんでした。つまり、ビジネスで生かせる強みと言うものは自分では自覚できないものである可能性が高い、ということです。その自覚できない強みを発見するために自己分析しましょうというのが今回のお話です。

PAは引き算といわれるのはなぜか?

今回はアカペラのPAの話です。よくPAは足し算ではなく引き算だ、といったことを耳にします。その理由を解説していきます。

 

そもそもPAの足し算引き算って何?

PAの足し算引き算とは音量のバランスを調整する時の方法です。誰かの音が聞こえない時に、その人の音量を上げるのが足し算。他のパートの音量を下げるのが引き算です。音を足したり引いたりしているという考え方ですね。

 

実際の音量と人間が感じる音量は違うもの

実際の音量(正確には音圧)と人間が感じる音量は違うものです。音圧を上げれば音は大きく聞こえますが、その度合いは一定ではありません。音圧を上げれば上げるほど音の上がり方が小さくなるように聞こえます。数字で例えると、音量51から60に上げるよりも1から10に上げる方が上がり幅が大きく感じます。

 

誰かの音が埋もれた時には?

PAをしてると誰かの音だけ小さくて埋もれてしまうことがよくあります。ここではリードが埋もれたとしましょう。リードの声量のせいで埋もれているので、単純にリードのフェーダーを上げればいいと思うかもしれません。それで上手いくいく場合もありますが、変わらないこともあります。それはどんな時かというと、全体音量が十分に大きくなっている場合です。この状態では人間の耳には音の上げ幅が小さく感じてしまうため少しフェーダーで上げたくらいでは変わりません。リードの音が聞こえるようにするためには他のパートの音量を下げれば良いです。全体の音量が下がれば音の変化に気がつきやすくなるためリードの音が大きく聞こえるようになります。これが引き算のPAが良い理由です。

科学的に正しい4つの勉強法

テスト勉強といえば教科書やレジュメを何度も読み返すってのが一般的だと思います。しかし、それはあまり意味がないようです。それではどうすれば効率よく学習することができるのか?今回は「想起練習」「交互練習」「多様練習」「精緻化」の4つの手法についてお話します。

情報元の本はこちら

使える脳の鍛え方 成功する学習の科学

使える脳の鍛え方 成功する学習の科学

 

 

 

想起練習

一言で言うと思い出そうとすること。小テストやクイズなどで学習したことを思い出そうとすると記憶に定着しやすくなるそうです。ある高校で実験で想起練習の効果を測る実験が行われました。ある単元では授業内で小テストを行い、別の単元では小テストを行いませんでした。その後期末テストの平均点を比較したところ、小テストを行った単元の方が平均点が約13点高くなりました。

 

交互練習

一つのことを勉強し続けるよりも異なる種類の勉強を交互にやる方が効率が良くなります。学生を対象に4種類の立体の体積を計算する問題を解かせる実験があります。片方のグループは1種類ずつ立体の体積を求める問題を解きました。もう片方のグループでは解く問題は同じでしたが、解く順番は4種類がばらばらに混ざった状態でした。全ての問題を解き終わった後のテストでは1種類ずつのグループは正答率が89%、ばらばらのグループは60%でした。しかし、1週間後にもう一度テストを行ったところ、1種類ずつのグループは20%まで落ちていたのに対し、ばらばらのグループは63%になっていました。

 

多様練習

一種類の方法だけをやるのではなく様々な学習方法を行った方が良い、というのが多様練習の考え方です。子供に玉入れをさせる実験が行われました。かごは90cm離れた場所にあります。まず、子供を二つのグループに分けて練習をさせました。一つ目のグループは90cm離れて練習をしました。もう一方のグループは60cmと120cmの2種類の距離で練習しました。その後両グループとも90cm離れて玉入れを行ったところ、二つ目のグループの方が成績がよくなりました。練習方法を変化させることによってより大きな効果が得られるということです。

 

精緻化

新しく学んだことを既存の知識と結びつけることです。丸暗記だと大した量を覚えることはできませんが、精緻化をすることでいくらでも覚えることができます。

暖かい空気は冷たい空気より水蒸気を多く含むことができるが、みずからの経験でそれが真実であることを理解するには、エアコンの裏から垂れる水滴や、息苦しいほど暑い夏の日、にわか雨のあとで気温が下がることを思い出すといい。

 

 

 

絶対に忘れない学習法があるらしい

決して忘れない学習法というものが紹介されている本を読んだので簡単にまとめてみます。

 

なぜ、学んだものをすぐに忘れるのだろう? (「学び」と「忘れ」の法則)

なぜ、学んだものをすぐに忘れるのだろう? (「学び」と「忘れ」の法則)

 

 

 

この本では「オフィシャルな学習法」と「クラシカルな学習法」という二つの学習法を対比させ、クラシカルな学習法が優れていると述べています。

オフィシャルな学習法とは一般的に普及している学習のことで、以下の特徴があります。

  • 努力する必要がある
  • 意識的に学ぼうとする
  • 親や教師に言われてやる
  • すぐ忘れる

 

まぁ、心当たりはありますね。頑張って覚えた割に試験が終わったら思い出せなかったり。それに対してクラシカルな学習法の特徴がこちら。

  • 努力する必要がない
  • 無意識に学ぶ
  • 自発的に学ぶ
  • 絶対に忘れない

 

見事に正反対。努力しないで覚えられて、絶対に忘れないなんて最高ですね。このクラシカルな学習法はどんなものか。これは人と関わる中で自然に学ぶ、というものです。小さな子供が突然難しい言葉を話して「どこでそんな言葉覚えたの?」みたいな。周りの人間から自然に言葉や知識を学ぶことがクラシカルな学習法の基本です。その集団の中での常識を学ぶと言ってもいいかもしれません。業界用語や若者言葉なんかもその例でしょう。勉強に活かそうとすると、英語を学ぶなら英語を話す集団に参加すると良いということになりますね。学校の成績が良く英語の文法は完璧だけど会話することはできない人と、まともに学んでいないので文法の知識はないけど適当に話しているうちに自然と会話ができるようになった人の例もあります。絶対に忘れないとまで言えるのか分かりませんが、自然に覚えたことってなかなか忘れないイメージはあります。

 

しかし私のように人と話すことが苦手な人間にはちょっとしんどいですね。でも大丈夫。人と話さなくてもクラシカルな学習法を実践する方法があります。それが読書。本の世界に入り込むことでそこでの知識を学ぶことができます。ハリーポッターの登場人物とか呪文の名前とか、覚えようとしなくても覚えてるものですからね。学習効果を調べた研究によると、高校生の一年間で増える語彙の数は1500から8400語らしいですが、この差は読書量が影響しているそうです。

 

このクラシカルな学習法って小説や漫画、ゲームなど結構幅広く応用できそうですね。FGOで世界の偉人の名前を覚えたり、「はたらく細胞」見て体内の免疫の動きとか学習するのが良いのかも知れません。個人的には社畜ちゃん読んでたら同じWEB系プログラマになってたのでこの効果侮れないなって思ってます。





「2つの夢をかなえる方法」のまとめ

「2つの夢をかなえる方法」

賭ケグルイの原作者の河本ほむらの本

筆者は漫画の原作と司法試験合格という二つの夢を同時に叶えている。その時の経験から2つの夢を叶える方法について書かれている。その中で自分が印象に残った部分を書いていく。

 

2つの夢を叶える方法

2つの夢を叶える方法

 

 

 

 

 

夢の裏にある望みを叶える

例えばオペラ歌手になる夢を持った人がジャズバンドのボーカルとして売れた時、夢が叶ったと言えるのか?それはその人の夢の裏にある願望が何かによって変わる。もしその人が大切にしている願望がオペラであれば夢は叶わなかったとなる。しかし、その人が大切にしている願望が人前で歌うというところならば、それがジャズバンドのボーカルと言う形でもその条件を満たしているので夢は叶ったと言える。夢を叶えると言う事はその人が持っている願望が大事になる。自分の根本的な望みを把握することが大切である。

 

おススメは大事

今実際に夢を叶えている人が勧める行動などは率先して行うべきである。多くの人は勧められたことをやらない。単純に勧められたことをやると言うだけで周りから1つ抜きん出ることができる。

 

トレードオフ

夢を叶えるには何かを犠牲にしなければならない。人生の中で使える時間は限られている。夢を叶えるためには努力することが必要である。それ故普通の人がやっていることをやらずにその時間を努力に使う必要がある。つまりはトレードオフである。

 

行動が大事

実際にやってみることが大切である。漫画家を目指していても実際に年に一本も漫画を書かない人がいる。一方で、仕事をしながらでもコミケに作品を毎回出し続けている人がいる。その人は兼業であっても年に二本の漫画を描いていることになる。このような人の方が数をこなしている分、夢をかなえる可能性は高い。また実際にやってみないとわからないと言うこともあるので、夢を叶えたいときには実際に行動してみることが大切になる。

 

シナジー効果

複数の夢を叶えることによってシナジー効果が起きる。筆者の例で言うと、他の漫画家ではなく司法試験に合格した漫画家と言うことで肩書がつく。それによって差別化を図ることができる。1つの夢を叶えることによってもう一つの夢をかなえる手助けができる。