即時関数ってなに?

即時関数って定義時に即座に実行される関数ってのはわかるけど、イマイチ使い所がわからなかったので、調べてみました。
案外コードみてると出没するので覚えておくべきと思い纏めます。

 STEP1 即時関数の構文

構文は2パターンあります。

// パターン1
(function () {
  // 関数の中身
}());

// パターン2
(function () {
  // 関数の中身
})();

異なる部分は、最後の括弧です。
即時関数に引数を渡す場合は以下のようにします。

// パターン1
(function () {
  // 関数の中身
}('arg1', 'arg2'));

// パターン2
(function () {
  // 関数の中身
})('arg1', 'arg2');

即時関数は通常の関数のように戻り値を指定することも可能です。

var result = (function (weight, height) {
  return weight / (height * height)
}(50, 1.5));

console.log("bmi is " + result);  // bmi is 22.2....

 STEP2 即時関数の用途

 定義後に実行され再利用されない場合

例えば、画面遷移時のページの初期化や、ブラウザのバージョンの判定等々です。

var VENDER = (function () {
  var ua = navigator.userAgent;
  if (ua.indexOf('Webkit') != -1) {
    return 'webkit';
  } else {
    return '';
  }
}());

判定後にグローバルスコープに余計な関数名が残ることがありません。
また、最初の一度のみ実行されれば良いので即時関数に向いています。再利用もしません。

 スコープを汚染せず新たなスコープを作成する

何を言っているんだっと思う人の為にコードの例で説明します。

例:即時関数を使わない場合(アンチパターン)
var bmi = 0;

var weight = 50;
var height = 1.5;

bmi = weight / (height * height);
console.log("bmi is " + bmi);  // bmi is 22.2....

上記のコードはうまく動きます。しかし、変数weight,heightをグローバルスコープに定義しています。もし上記コードより前に同じ変数名が定義された場合、変数を上書きしてしまうので、予期せぬ動きをする可能性があります。このようなコードを書くとコードが大きくなるにつれてグローバルスコープが不要な変数で埋め尽くされてしまいトラブルの元になります。

では、一時的な変数を関数の中に定義してローカル変数にしてしまいます。

例2:名前付き関数を使う場合(アンチパターン)
var result = 0;
var bmi = function() {
  var weight = 50;
  var height = 1.5;
  return weight / (height * height); 
}
result = bmi();
console.log("bmi is " + result);  // bmi is 22.2....

これにより、変数weightheightが関数bmiのローカル変数となるのでグローバルスコープを汚染しなくなりました。また、weightheightが外側のスコープから上書きされることはなくなり安全になりました。しかし、ここでは関数を格納しているbmiという変数がグローバルスコープに定義されるため、一番目のアンチパターンと同じ問題が発生します。
まだ、一番のパターンよりはマシなコードですが、このbmi関数が再利用されない関数だとしたら、グローバルスコープに余計な変数を残す必要はないので、次のように即時関数を使用します。

例3:即時関数を使う場合
var result = 0;
result = (function() {
  var weight = 50;
  var height = 1.5;
  return weight / (height * height); 
}());
console.log("bmi is " + bmi);  // bmi is 22.2....

これで、例2のようにbmiという関数はグローバルに生成されません。
しかし、resultという変数をグローバル変数に宣言しているので、全く汚染しなようにするには以下のようにします。

例4:即時関数を使う場合
(function () {

    var bmi = function() {
      var weight = 50;
      var height = 1.5;
      return weight / (height * height); 
    };
    console.log("bmi is " + bmi());  // bmi is 22.2....

}());

と以上になりますが、即時関数は以上のようにグローバルスコープを汚染しないように使用することが多いようです。試しに適当にライブラリの中身を見てみると以外に即時関数が出てくるのでチェックして見てください。

Kaggleってなに?

www.kaggle.com

Kaggleとは

Kaggle(カグル)はアメリカに本部を置く、 世界中のデータサイエンス・機械学習に携わる人が 参加するコミュニティーサイトです。

企業とデータ分析のプロである データサイエンティストをつなぐプラットフォーム。 企業がコンペ形式で課題を提示し、

賞金の提供と引き換えに最も精度の高い分析モデルを得る。 ある種クラウドソーシングに近い仕組みです。 世界規模で見ると、AmazonFacebookWalmartといった 名だたる企業がコンペを実施しているKaggle。

2017年、GoogleはKaggle社を買収すると発表しました。

Kaggleのコンペとは

コンペは、参加者がデータ分析の力を競い合う競技です。 例えば、メルカリがKaggleで主催したコンペは、 出品された商品の状態やブランドといったデータから、 販売価格を予測するという問題が出題されました。

なぜメルカリがコンペを主催するの? 実はメルカリが主催したコンペには賞金があります。 一方、コンペ参加者はデータ分析のプログラムを提出しなければいけません。 つまり、メルカリはデータを公開して世界中の人々に分析をさせて、 優れたプログラムを買い取っているのです。

このような企業や政府が主催するコンペがKaggleでは開催されています。 もちろん初心者のための、賞金のない入門用のコンペもあります。

Kaggleをはじめるには?

Kaggleは全て英語のサービスなので英語の読解力が必要です。 また、データ分析の分野で利用されるPythonの知識も求められます。

【Larabel】bladeってなに?

bladeとは

ブレードはクラスのように階層化したテンプレートエンジンです。 ヘッダーやフッターなどの決まりきった共通部分は基底のテンプレート(親ビュー)に定義して、body の中だけを(子ビュー)で定義するといった使い方をします。

 

Bladeテンプレートを使うにはファイルの拡張子を「ファイル名.blade.php」としておく必要があります。

 

bladeファイルの書き方

php を書いている人にとっては覚えることはあまりなく、いくつかの約束事に注意しておけばすぐに書けるかと思います。

・ファイル名.blade.php で blade のファイルを作成

・{{ $変数 }} でデータ出力、セミコロンはいらない

・制御構文はディレクティブで記述できる、@ディレクティブ名と@endディレクティブ名が基本的な対になっている。(@if … @endif、@foreach … @endforeach)

php 描きたい場合は <?php … ?>。ただしbladeの構文で書ける部分はそれを使った方が何をしたいか明確になる。また @php ディレクティブがあるのでどうしてもというときはこれを使いましょう。

PHPの特徴

PHPとは

PHP(ピー・エイチ・ピー)は "The PHP Group" によってコミュニティベースで開発されているオープンソースの汎用プログラミング言語およびその公式の処理系であり、特にサーバーサイドで動的なウェブページ作成するための機能を多く備えていることを特徴とする。 名称の PHP は再帰的頭字語として、 "PHP: Hypertext Preprocessor" を意味するとされており、「PHPはHTMLのプリプロセッサである」とPHP自身を再帰的に説明している。

PHPの特徴

  • 言語系 -
    ・HTML埋め込み型の構文(Hypertext Preprocessorたる所以)
    ・CやJavaに似た平易な文法
    ・弱い動的型付け
    ・クラスベースオブジェクト指向のサポート
    ・例外処理 (try, catch, throw) のサポート
  • 処理系 -
    ・サーバーサイドWebアプリケーション構築のための豊富な組み込み関数
    ・データベースへの容易なアクセス(ベンダーごとの組み込み関数、PDO)
    PECLによる言語機能の拡張

    最新のPHP7とは

    2015年12月に内部エンジンをZend Engine 3とした"PHP 7.0"がリリースされた。 Zend Engineの改善を行うPHPNG (PHP Next-Gen) プロジェクトの成果を取り入れており、データ構造の改善などにより、前バージョンのPHP 5.6と比べて25%から70%の性能改善が図られている。 また言語仕様も大きく拡張されており、引数のタイプヒンティングにスカラー型が指定できるようになる(タイプヒンティングは5.1で導入されたが、クラスや配列など一部の型に限られていた)他、戻り値へのタイプヒンティングも導入されており、前年に発表されたHHVM用プログラミング言語Hackの影響が見受けられるものになっている。

Laravelのartisanコマンドまとめ

プロジェクト関連

 Laravelプロジェクトを作成する

  • composerでインストール

    composer create-project --prefer-dist laravel/laravel your-project-name
    
  • または、laravelコマンドでインストール

    laravel new your-project-name
    
    • laravelコマンドの方法はあまり良くないらしい。
    • composerでの方法がおすすめ。

 Laravelのバージョンを確認する

php artisan --version

 ローカルwebサーバを起動する

  • ローカルwebサーバを起動すると、ブラウザからhttp://localhost:8000/でアクスできるようになる

    php artisan serve
    

 console系

 バッチ処理定義を作成する

php artisan make:console YourConsoleCommand --command="your:console:command"

 バッチを実行する

APP_ENV=(environment) php artisan your:console:command

 migration系

 migration定義を作成する

php artisan make:migration create_your_table_name

 migrationを実行する

  • migrationを実行してテーブルを作成する

    APP_ENV=(environment) php artisan migrate
    
  • すべてのテーブルを再作成するには

    APP_ENV=(environment) php artisan migrate:refresh

Laravel を導入する

いつもご覧頂きましてありがとうございます。
Ruby言語一筋の私でしたが
PHPでも何か作ってみたいと思い
今回はPHP7 + Laravelでブログアプリを作りはじめました。

本日はその学習の中から
Laravelの導入方法についてざっくり記していきます。

実装環境

macOS Mojave 10.14
・PHP7 v7.1.23
・sqlite3 v3.24.0
・Composer v1.9.0
・Laravel v5.5以降

準備する環境

PHP 7 以上
sqlite 3 (データベースはsqliteを使用します)

Composerをインストールする

今回はPHPのパッケージ管理ツールである
Composerを使ってLaravelをインストールしていきます!

Composerの公式サイトへアクセス
Composer公式サイト

f:id:nishida_0730:20191013140508p:plain
Downloadをクリックして

f:id:nishida_0730:20191013132616p:plain
赤枠の中のコードを全てコピーしてターミナルに貼り付ける。

ホームディレクトリ: $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');" 


これでComposerのインストールは完了です。

Laravelをインストールする


では、Composerを使ってLaravelをインストールします。
引き続きターミナルを使用します。

ホームディレクトリ: $php composer.phar create-project --prefer-dist laravel/laravel アプリ名


このコマンドを入力することでLaravelをインストールしてアプリを作成できます。
コマンド入力後にアプリ名のディレクトリができてるので
そのディレクトリに移動してLaravelがインストールできてるか確認します。

アプリ名: $ php artisan --version


上記のコマンドを先程作成したアプリのディレクトリで実行します。

アプリ名: $ php artisan --version
=> Laravel Framework 5.8.35


Laravelのバージョンが確認できます。

これでLaravelをインストールは完了です。
最後までご覧いただきありがとうございました。


【Ruby】Rubyの基礎文法4

変数


オブジェクトの入れ物、またはオブジェクトを識別する名札のようなものです。
例えば、helloworld.rbで"Hello World"という文字列を作りました。
そしてこの文字の数を数えたかったため、lengthメソッドを利用しました。

"Hello World".length
=>11

11という値が返ってきました。では、この値を保持し、3回、4回と利用するにはどうすればいいのか
?毎回"Hello World".lengthと記述するのは、ちょっと面倒です。
ここで役に立つのが変数です。

変数は以下のように宣言します。
=を挟んで右側においたオブジェクトの返り値を、左側の変数の中に入れるイメージです。

変数 = 格納するオブジェクト


変数の名前は、原則として小文字から始めます。

 変数の命名規則

変数を宣言する際にはいくつかのルールが存在します。
・原則、小文字から始める
(アンダーバー)から始めることも可能ですが、特に理由がない場合は避けましょう。)
・名前の1文字目でなければ大文字や数字、
(アンダーバー)を使ってもよい
・名前にスペースが入ってはいけない
予約語Rubyによって最初から用途を与えられた単語)と同一の名前は使ってはいけない