エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

PHPとswiftの『switch』の挙動の違い【91日目】

switchのbreakって邪魔ですよね。

phpjavaのswitch文って、
基本的にbreak使ってcase内の内容だけを実行させるけど、
swiftはbreak要らないんだね!

あとkotlinはwhenって形式だとbreak要らないみたい!

同じ名前でも違う挙動するんだねー

ってことでコード

swift

num = 1;
switch num {
  case 1:
    print("1")
  case 2:
    print("2")
}

php

$num = 1;
switch($num) {
  case 1:
    echo 1;
    break;
  case 2:
    echo 2;
    break;
}

break使わない時のswitchの動きはどうするの?

break使わないように、まっすぐ下におろしたい時は、fallthroughって書くと良いらしい。

swift

num = 1;
switch num {
  case 1:
    print("1")
    fallthrough
  case 2:
    print("2")
    fallthrough
}

php

$num = 1;
switch($num) {
  case 1:
    echo 1;
  case 2:
    echo 2;
}

日記

私が、if, eldeif, elseifって書いていたら、
swift使いの人が、switchで書けば?ってお話してたら始まったお話。

PHPでswitch書く時は、==と同じ曖昧比較なので注意!

こんな感じに、普段使ってるコードってどういう意味なんだろう?ってちゃんと疑問に持つ大切。

最近読書が捗ってていい感じに勉強できてる(・∀・)

LaravelのsortByとorderByの使い所【84日目】

sortByとorderByの違いって?

sortBy()の使い所は、コレクションをソートする時に使います。
orderBy()where()とかと同じで、データベースから取得する時に使います。

使い方の違い

$query->get()->sortBy('id');
$query->orderBy('id')->get();

この2つの文がありますが、sortBy()get()してから使います。
まあ、コレクションに対してやるんだからそうよね。

orderByのいいところ

getは極力最後に使いたいので、

$query()->where('id', $id)->orderBy('created_at');

いろいろ書く
$query->get();

って書いた方が見やすかったり、処理わかりやすかったり、柔軟だったり

そもそも引数がコレクションのこともあるかもしれない

function (Collection $items) {
$items->sortBy('id');
}

引数がコレクションなら、そもそもsortByの方しか選択肢ないよねっていう。

同じことが出来るなら、正しい方を選ぶ癖つけよう。

getfirstとか、plucklistsとか。最終的に同じこと出来るなら、より短くてわかりやすいやつを選ぶ方が良いよね。

そのためにも、Laravelではどんなこと出来るんだっけっていうのを元のソースコードやドキュメント読んでちゃんと知っておかなきゃって思った1日でした。

日記

とうとうVSCodeを卒業して、IDEに手を出す日が来てしまいました・・・

ってことで、今後IntelliJを使う練習する予定です。

自分のPCにも、PHPStorm有料で買うのも視野。お金かけて何かを買うのは、
何かを始める動機、やらない理由を塞ぐことにも繋がるので、
自分への投資って大切。

こうやってブログ書くのも、PCを高い金で買って自分にプレッシャーかけたのがきっかけだし!

今日の運動

ごめんなさい、予定があって運動どれくらいやるか未定いいいいい

せ、せめてエアロバイク3.0kmはやる予定!

配列の中に配列が入っている時のforeach書き方2つ【83日目】

普通ならこうだし、これでも良いんだけど

foreach($array as $items) {
  echo 'first: ' . $items[0] . PHP_EOL;
  echo 'second: ' . $items[1] . PHP_EOL;
}

f:id:willow710kut:20180104223934p:plain

こんな書き方もあるよ

foreach($array as list($a, $b)) {
  echo 'first: ' . $a . PHP_EOL;
  echo 'second: ' . $b . PHP_EOL;
}

f:id:willow710kut:20180104223842p:plain

ちなみにlistの他の使い方

$func = function() { return array(0, 1, 2);};
list($a, $b, $c) = $func();

f:id:willow710kut:20180104223019p:plain

配列を解体して受け取ることが出来るみたい。

どっちが良い?

ってのが自分でもわからない。見栄えはどっちがいいかな。

順番に対して大きな意味とかあるのであれば、前者が良いかも?
ただ、それならキーを入れたい気もする。

どれがどういいかはまだわからないので意見ほしいかも。

日記

仕事始まりましたね。

やっぱり気分が違う。楽しい。けどやっぱり壁はいっぱいあるわけで。

そういや、同期と新規事業こんなの出来ないかなってお話してました。
まあ、似たのあるのはそうなんだけど、マネタイズとか、提供方法とか考えれば
どこかで差別化、優位性とか出せて住み分け出来るかもってお話してた。

どうやったら世の中のためになるのかなーとか。問題解決出来るのかなーみたいなことを
これからも考えるのをやめないでいたいですね。

今日の運動

腹筋ローラー5回(朝)
エアロバイク 3.0km(今から)

Laravelで『ページ3』や『次へ』や『前へ』というページネーションの作り方【77日目】

参考

ペジネーション 5.1 Laravel

手順

  1. ControllerでpaginateをつかってDBからデータ取得。
  2. Viewでrenderで呼び出す(renderは{!! !!}のカッコで囲むこと)

コード

    public function index()
    {
        $users = DB::table('users')->paginate(15);

        return view('user.index', ['users' => $users]);
    }
<div class="container">
    @foreach ($users as $user)
        {{ $user->name }}
    @endforeach
</div>

{!! $users->render() !!}

日記

朝早めの更新。というのも、昨日は早めに寝すぎて、早めに起きすぎた。ってことでもう半日過ごした気分なのです。

そういや、記事の質があんまりよろしくない点に関して、技術記事はリライト予定!
というのも、邪魔な日記があったりするしね。

今のところは忘備録って感じです。アウトプットすることで、自分の記憶に残りやすいし。
あと稀に知らなかった!役に立った!ってパターンもあるから、当たり前だと思っていることもアウトプットするの大切!

【Laravel】DBのデータを変形させて$model->valueで取るアクセサー【76日目】

反対のミューテターに関してはこちらの記事へ

willow710kut.hatenablog.com

参考

Eloquent:ミューテター 5.1 Laravel

書き方

class User extends Model
{
    /**
     * ユーザーのファーストネームを取得
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        //最初の文字を大文字にして返す
        return ucfirst($value);
    }
}

これで$user->first_nameって書くと、最初の文字が大文字になって値を取得することが出来る

get○○Attributeという形なので、お察しの通りsetもあります。変形させてから値を入れる。
詳しくは参考のURL先へ。

PHPで二重for文を抜ける方法【74日目】

前回の記事

willow710kut.hatenablog.com

前回の問題

1.while (true) {
 2.    echo "1\n";
 3.    while (true) {
 4.        echo "2\n";
 5.            while (true) {
 6.                echo "3\n";
 7.                [?????]
 8.            }
 9.        echo "2 end\n";
10.        break 1;
11.    }
12.    echo "3 end\n";
13.    break 1;
14.}

方法

3行目に戻る方法
continue 2;

12行目に行く方法
break 2;

continueどんな動作?

continueはループを止めて、for文等のループの判定に戻ります。
その時、()内の判定もちゃんとするよ。

continue;continue 1;は今いるfor文等の頭に戻ります。
continue 2;ってすると、今いるfor文の、1つ外のfor文に戻ります。

breakどんな動作?

continueはループを止めて、for文等のループの判定から抜けます。
動作の途中であっても、for文から抜けるよ。

break;break 1;は今いるforを抜けて、次の行に行くよ。
continue 2;ってすると、今いるfor文の、さらに1つ外のfor文から外に抜けるよ。

日記

残業とかが大変だったけど、すっごく楽しかったし上司の方に感謝したいって日記書こうと思ったけど、
言葉まとまらなかったし今度まとまったらfacebookかなにかで書こうっと。

さて、勉強とお仕事もう少し頑張るぞー!

あ。そういや2kg落ちたと思った体重、ここ2日で3kg増えたのでまたやっべってなってる。

今日の運動

エアロバイク 3.0km

【出題編1】PHPで二重for文を抜ける方法【73日目】

クイズ形式の試み。

クイズ形式で出題して、後日回答の参考になる記事を書くテスト

 1.while (true) {
 2.    echo "1\n";
 3.    while (true) {
 4.        echo "2\n";
 5.            while (true) {
 6.                echo "3\n";
 7.                [?????]
 8.            }
 9.        echo "2 end\n";
10.        break 1;
11.    }
12.    echo "3 end\n";
13.    break 1;
14.}

7行目に追記して、

  1. 3行目に戻る方法
  2. 12行目に行く方法

は何でしょうっていうお話。

試したい人用コピペコード

php -a

while (true) {
    echo "1\n";
    while (true) {
        echo "2\n";
            while (true) {
                echo "3\n";
[????];
            }
        echo "2 end\n";
        break 1;
    }
    echo "3 end\n";
    break 1;
}

Laravelで多対多のリレーションを組む【71日目】

f:id:willow710kut:20171223184135j:plain

多対多とは

ある人は、いくつかのグループに所属しています。
あるグループは、いくつかの人で構成されてます。

これが多対多です。お互いが複数の対象を持ってますね。
これをデータベースで表現すると、中間テーブルと言うものが必要です。
データベースだとこんな感じ。

menbers
id|name
1 | ういろう
2 | りんご
3 | マジシャン
groups
id|name
1 | 野球部
2 | 麻雀部
3 | ダーツ部
member_group
id|member_id|group_id
1 | 2| 1
2 | 2| 3
3 | 3| 3 
4 | 3| 2

野球部(group_1)は、りんご(member_2)が所属している。
マジシャン(member_3)は、麻雀部(group_2)とダーツ部(group_3)に所属している。

こんな感じの意味になります。

Laravelでリレーションを組むには?

参考 Eloquent:リレーション 5.1 Laravel

結論
belongsToManyを使う。

class Member extends Model
{
    /**
     * memberが属するグループを取得
     */
    public function groups()
    {
        return $this->belongsToMany('App\Group');
    }
}

この時、中間テーブルの名前がmember_groupとは異なる名前の時は、

class Member extends Model
{
    /**
     * memberが属するグループを取得
     */
    public function groups()
    {
        return $this->belongsToMany('App\Group', 'other_table');
    }
}

日記

ゆっくりと記事書けるのいいね。
他にもネタがあるのでゆっくり消化しよう。

そういや、ザ・シークレットが面白いと聞いたので見てみた。最初は宗教かな?通販かな?って感じだったけど、 5分したらなるほどそういう話ね。ってなった。