LINQによる配列操作
家にはmacとchromebookしかないのでc#とは関わりがないのですが
会社に行くとc#を書くお仕事なので、c#の特徴でもあるLINQについて調べたことをjsと比較しながら学びたいと思います
LINQの種類
メソッド式
var ary = {1, 2, 3}; var result = ary.Where(x => x % 2 == 0).Select(x => x * 2); Console.WriteLine(result);//=> [4]
以下のように改行してもいい
var result = ary .Where(x => x % 2 == 0) .Select(x => x * 2);
クエリ式
var ary = {1, 2, 3}; var result = (from x in ary where x % 2 == 0 select x * 2); Console.WriteLine(result);//=> [4]
()
で囲む必要はないが書いてた方が見やすい気がする
囲わないとこんな感じ
var result = from x in ary where x % 2 == 0 select x * 2;
これも改行してもちゃんと動く
var result = from x in ary where x % 2 == 0 select x * 2;
js arrayメソッド対応表
javascript | c# |
---|---|
map | Select |
filter | Where |
reduce | Aggregate |
forEach |
LinqのメソッドにforEach
はない
Linq style “For Each” - Stack Overflowによると、ToList
でList
に変換してからList#ForEach
を使うとできる
しかしToList
でList
に変換するのは効率が良くないので、できれば Reactive を使って実装するのが良いらしい
Aggregate(reduce)の使い方
aggregate
【動詞】【他動詞】
〈…を〉集合する,集める,集団とする.
【自動詞】
1 集まる.
2〔+補語〕総計〈…と〉なる.
(引用: weblio)
「配列の要素を全部足す」のような集約をするための関数
型定義
public static TAccumulate Aggregate<TSource, TAccumulate>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func )
(引用: Enumerable.Aggregate - MSDN)
実行例
var ary = {1, 2, 3}; var result = ary.Aggregate(0, (sum, x) => sum + x); Console.WriteLine(result);//=> 6 var result2 = ary.Aggregate(4, (sum, x) => sum + x); Console.WriteLine(result2);//=> 10
firebase hosting入門
前回からfirebaseを使い始めました。
今回は第2弾ということでfirebase hostingを使ってみたいと思う。
tl;dr
firebase-tools
インストール- firebaseコマンドでログイン
- firebase consoleでプロジェクト作成
- firebaseコマンドで雛形作成
- firebaseコマンドでデプロイ
- firebaseにデプロイしたものを確認
インストールとか
まずはfirebaseのCLIツールをインストールしてログイン。 今回はfirebaseの説明だけをしたいと思うのでNode.jsのインストールは省略します。
npm i -g firebase-tools firebase login
firebase login
を実行すると
「Allow Firebase to collect anonymous CLI usage information?」と出て来ると思いますが
これはよくある「匿名の情報を収集して良いか」なのでY or N
好きな方を選べばいいと思います。
firebase hostingでプロジェクトを作る
firebase consoleにアクセスしてテストプロジェクトを作成する。
適当にプロジェクト名を入力して、「国/地域」は日本を選択。
プロジェクト作成からアップロードまで
インストールと準備が終わったので、プロジェクト以下コマンドでプロジェクトを作成する。
firebase init
そこから選択肢をポチポチしていきます
- 「Hosting: Configure and deploy Firebase Hosting sites」を選択
- 「What Firebase project do you want to associate as default?」上で作成したプロジェクト名を選択
- 「What file should be used for Database Rules?」そのままEnter
- 「What do you want to use as your public directory?」そのままEnter
- 「Configure as a single-page app (rewrite all urls to /index.html)?」
n
を選択
初期化が終わったら以下コマンドでデプロイする
firebase deploy
これでdeploy完了!
hostingされているページを確認する
firebase consoleで作成したプロジェクトを選び、hostingのページを選ぶと
<project名>-<なんかID>.firebaseapp.com
と書かれたものがあるので、それをクリックすると以下のようなページが表示される
ちなみに
<project名>-<なんかID>.firebaseapp.com/foo.html
のような存在しないページにアクセスすると404.html
が呼ばれます。
これは存在しないページにアクセスしようとした時に404.html
が決め打ちで返されるようになっているみたい。
firebase始めました
firebaseを使ってみようと思い、Webで使える(Android, iOS以外)ものを調べたのでそのメモ。
本社にいてもWebチームだからあんまり関わりないんだけど、Androidアプリとか作ってる会社に努めているし(今派遣先に出向してるけど)、どこかで使えそうだし手出してみるか!というのが動機。
本当は会社に金出してもらってAWS Lambdaとかやりたいんだけど、個人でやるには怖いってのは秘密
firebase authentication
認証用のサービス。 多様な認証方法をサポートしている。
珍しいなと感じた点としては"匿名認証"という仕組みがある。
- 認証方法一覧
Firebase Cloud Messaging(FCM)
メッセージ配信サービス。GCM(Google Cloud Messaging)の後継らしい。
最大4KBのペイロードをクライアント(AndroidとかiOSとかPCとか)に送ることができ、http
とxmpp
をサポートしている。
これを利用するとWeb Pushを使ってブラウザに通知を送れるんだと思う(未検証なので今後やってみる予定)。
Firebase Realtime Database
NoSQLのクラウドデータベース。
オフラインでもデータを更新できて、オンラインになったときに更新分をDBとやりとりして、いい感じにデータを更新してくれるのがすごい。
一応無料枠はあるけど、別のサービスと比較すると料金高く感じる。
まだ使ってないけど、ドキュメントとか読んでる感じだとオフラインでの動作や、動機速度などはとても優秀な印象。
Firebase Storage
画像や動画などのデータを保存してくれるサービス。
所謂Google版のAmazon S3だと思う。
Firebase Hosting
HTML, CSS, JSのような静的ファイルをホスティングしてくれる。
デフォルトでhttps
をサポートしていて、firebaseが各CDNエッジからコンテンツを配信してくれる。
カスタムドメインも使えて、サブドメインにもhttps
通信を適用できる。
あと間違えてデプロイしてしまったような時もfirebase consoleから簡単に前の状態に戻すことができるみたい。
まとめ
firebaseにはいろんなサービスがあるけど、Web屋さんが使えるサービスとなるとこの辺に絞られてくるみたい。
とりあえず無料枠でいろいろ遊んでみようと思ってる。
ちょうどtwitterがモバイルWeb版をPWA化して、ネイティブと戦える!的なことを発信していたので、HostingとかFCMを使ってPWAの構築を考えてるので、できたらまた記事にしようと思う。