20210424_アウトプット(Rails・php)

アウトプット画像

今日やったこと

  • 現場で使えるRubyonRails速習ガイド(1時間10分)
  • 初めてのphp(2時間50分)


1%の成長

  • 楽しみながらRailsの知らなかったことやphpのこと学べた。


新しい発見

Rails

パーシャルについて

パーシャル(一部分)側(_form.html.slim)
  • modelについて@taskからtaskに変更。
= form_with model: task, local: true do |f|

(省略)
呼び出す側(new.html.slim)
  • インスタンス変数@taskを、パーシャル内のローカル変数taskとして渡す、という意味になる。
  • 明示的にローカル変数として渡すことで、インスタンス変数の定義に依存しない再現性の高いパーシャルにすることができる。
  • どんな変数を利用しているかがわかりやすいので見通しの良いコードになる。
(省略)

= render partial: 'form', locals: { task: @task }

Railsのビュー内にJavascriptを組み込める

  • dataオプションを使って、"confirm: メッセージ内容"を渡すと、リンクをクリックした時にダイアログ(パソコン上の小さな会話ができるポップ)を表示し、OKが出た時だけ動作する。
= link_to '削除', @task, method: :delete, data: { confirm: "タスク#{@task.name}を削除します。よろしいですか?"}, class: 'btn btn-danger'



PHPについて

$i++(後置)と++$i(前置)の違い

  • 意味としては、インクリメント(増やすこと)を先に処理するか、後に処理するかの違い
  • どの時点で値を返す(出力する)かが異なるので注意!
  • 具体的に言うと、後置増分演算子$i++)は、プラス1する前に値を返す。そして次の処理をする前にプラス1して次の処理をスタートする。
  • なのでwhile文などで、1の時は実行、2の時は実行、10まで繰り返すというような時、1も表示させつつ、10まで続けたい時に、無限ループしないように中止する条件として使える。
インクリメント 処理
++$i(前置) まず先にプラス1、その後他の処理
$i++(後置) 他の処理を行なった後にプラス1
<?php
$foo1 = 1;
$foo2 = 2;

🟢その1(後置)
$foo1 = $foo2++; 
echo $foo1;

👉結果は2
(値を返すのは、$foo1$foo2の変数を代入した段階で返す。次の繰り返し分を書いていないのでここで終了しているが、次の繰り返しがある場合はプラス1をして、次の処理に移る。)

🟢その2(前置)
$foo1 = ++$foo2; 
echo $foo1;

👉結果は3
?>



whileとforの違い

  • 両方「繰り返す」という意味では同じ
  • 書き方として、whileは「〜の条件の間繰り返す」と書くwhile ($i <= 10)
  • forは「初期値はホニャで、〜の条件の間、〇〇を繰り返す」と書くfor ($i = i; $i <= 10; $i++)(最後はセミコロンいらない!)
  • forは複雑な式もできる。ここでいう「複雑な式」とは、初期値と繰り返し文をカンマで複数設定できると言う意味。



abs()関数ってなに?

  • absolute value(絶対値)のこと。
  • 数値には、閾値(変動する境目の値)があり、浮動小数点数を比較演算子で比べようとすると誤差が発生する。
  • abs()関数を使うと、絶対値で差分を比較するので、適切に比較できる



strcmp()関数ってなに?

  • 一言でいうと「文字列2つを辞書順で比較する関数」
  • 「大きい」「小さい」の判断を辞書順で決める関数。(数字、大文字、小文字)
  • 数字の比較に関しても数値の大きさではなく、辞書順。(例えば543215678であれば、46を比較して、54321の方が小さいと判断)
  • 引数に2つの文字列をとり、一番目の方が大きい場合は正数を返す。小さい場合は負数を返す。等しい場合は0を返す。
<?php
    $x = strcmp('6pack', 55) ;
    if ($x > 0) {
         print '6packの方が大きいと判断しているよ';
    } elseif ($x < 0) {
        print '55の方が大きいと判断しているよ';
    }
?>

👇出力結果👇
6packの方が大きいと判断しているよ
(なぜならば、6の方が辞書順で後ろだから)



宇宙船演算子ってなに?

  • 一言でいうと「あらゆるデータ型OKで、方法はstrcmpのような、中身はASCIIの比較演算子と同じ役割をするもの」
  • php7より導入。
  • strcmpと同じように、左にある方が大きい場合は正数、小さい場合は負数、等しい場合は0を返す。
  • ただし、数字文字列の場合にはstrcmp()ではなく、<>のような比較をするよ。
<?php
    $x ='6pack' <=> 55 ;
    if ($x > 0) {
         print '6packの方が大きいと判断しているよ';
    } elseif ($x < 0) {
        print '55の方が大きいと判断しているよ';
    }
?>

👇出力結果👇
55の方が大きいと判断しているよ
(なぜならば、6と55で比較しているから)



(番外編)摂氏と華氏の違いってなに?

  • 華氏(°F)から摂氏(°C)に変換するプログラムを書く問題があった。摂氏と華氏の違い、そういえばちゃんとわからないやと思って調べたところ面白かったのでメモ。(ざっくり)


華氏って?
  • 今から300年ほど前、ファーレンハイトさんが水銀温度計を発明した。(当時はアルコール温度計が使われており、精度がぐんっと上がった)
  • 中国に伝わった時、「ファー氏」が、「か氏」と聞こえて「華氏」となった。
  • ファー氏は、何かを基準にして、メモリをきちんと定めようと考えた。その基準を、100°Fを自分の体温、0°Fを氷に食塩を加えた温度(マイナス20℃くらい)にした。
  • 自分が作った温度計でいろいろ測りまくっていたところ、水は決まった温度で凍る・沸騰するということを見つけた。(当時は「凍る」「沸騰する」の温度が決まっているという発想がなかった)
  • 凍るのが32°F、沸騰するのが212°Fと分かった。


摂氏って?
  • セルシウスさんが「体温じゃばらつきがあって曖昧。もっとはっきりしたものを基準にしようよ。」として、凍る時を0°C、沸騰を100°Cにしたもの。


摂氏⇄華氏
  • つまり水の凍る・沸騰する温度を基準にすると、摂氏は100等分(0〜100℃)で、華氏は180等分(32°F〜212°F)の違いがある。
  • 摂氏°Cから、華氏°Fに変換したい時は、°C×9/5 +32
  • 華氏°Fから、摂氏°Cに変換したい時は(°F-32)×5/9


なぜ、アメリカやイギリスでは摂氏ではなく華氏が使われているの?(便利って思っているの?)
  • マイナスっていう感覚をほとんど使わないので便利。(-5℃の寒い日は、23°F)
  • 100°Fは体温が基準なので、100°Fを超えると病気だぞ(熱あるぞ)と目安になりやすいから便利とのこと。
    (なるほど・・慣れてないだけで便利なのかも?🤔笑)


ケルビン絶対温度(気体が分子の温度を止める温度)
  • ところで、この世で一番冷たい温度ってなに?そこで出てくるのかケルビン(K)
  • シャルルさんは、どんな気体でも温度を1℃上げると、1/273ずつ大きくなることを発見した。(つまり、273℃の時は、2倍の大きさとなる。)
  • 反対に、温度が下がっていくと体積は縮んでいく。273度下げたら気体の体積は0になる。つまり、気体の分子は運動を止める。(これ以上温度が下がらない)
  • つまり、この世に存在する下限(一番冷たいもの)はマイナス273℃と判断。(上限はない。)
  • マイナス273℃を基準(0ゼロ)としたのがK(ケルビン)。
  • 水の温度で例えると、マイナス273が0ケルビン、凍る0℃が273ケルビン、沸騰する100℃が373ケルビンとなる。
  • 実は、宇宙はとっても寒い。3K (マイナス270℃)。
  • この世で一番低温なものとして発見されているのは1K(マイナス272℃)で、宇宙にあるブーメラン星雲とのこと。🌌


感想

  • 学んでて楽しかった。今日は特に脱線することが多かったが、新しいことを知れて面白かった。
  • 速習ガイドの方は、Bootstrap入れると本当にビュー何もしなくてもわかりやすい表示やポップになっていてすごいと思った。slimもymlもインデントのコツが難しい。(目が慣れてない)
  • 今日も運動したり、散歩したり、料理したり、息抜きしながら新しい知識を学ぶのが楽しいと思いながら学べたのがよかったなあ。時間は短かったけど集中できた💡