Effective Scala Marius Eriksen, Twitter Inc. marius@twitter.com (@marius) [translated by Yuta Okamoto (@okapies) and Satoshi Kobayashi (@scova0731)] Table of Contents 序章 書式: ホワイトスペース, 命名, インポート, 中カッコ, パターンマッチ, コメント 型とジェネリクス: 戻り型アノテーション, 変位, 型エイリアス, 暗黙 コレクション: 階層, 使う, スタイル, 性能, Java コレクション 並行性: Future, コレクション 制御構造: 再帰, Return, forループと内包, require と assert 関数型プログラミング: 代数的データ型としてのケースクラス, Option, パターンマ
こんにちは、江口です。 2月21日(土)に「実戦での Scala 〜 6つの事例から知る Scala の勘所〜」をスマートニュース株式会社さんと共同で開催いたしましたので、その様子と発表内容を公開された資料とともに簡単に紹介します。 場所は渋谷にあるスマートニュースさんの新オフィスで行われました。Scalaへの注目度の高さもあってか、当日は広いスペースに用意された座席がほぼ満席という盛況具合でした。 ビズリーチの新サービスをScalaで作ってみた ~マイクロサービスの裏側 (株式会社ビズリーチ 竹添さん) 最初に、株式会社ビズリーチの竹添さんから、新サービスであるスタンバイという求人検索エンジンの開発についての発表が行われました。 サービス全体のアーキテクチャにマイクロサービスを採用し、各サービスの実装にはScalaを採用したというような内容でした。 Scalaを採用した理由として、並列処
Scala初学者の方が書くコードには、しばしば以下のようなものが散見されます。 list.map {x => x match { case A => case B => case _ => } } 無名関数を作るための構文である{x => ...}とexp match { case ... }を別々に考えるとこのようなコードになるのは無理はありません。しかし、これはもっと簡潔に書くことができます。改良したのが以下のコードです。 list.map { case A => case B => case _ => } 前者の書き方に比べて断然簡潔ですね。特別な事情がない限り、無名関数の引数を即座にパターンマッチする必要がある場合、後者の書き方を使いましょう。 ちなみに、この書き方を教えると結構びっくりされる方が多いようで、この構文はPartialFunctionのためのものだと思っていた、という
唐突に始まったScala Tipsコーナー、初学者が陥りがちなScalaのコードパターンを例にして、より良い方法を解説していきます。第一回はOptionクラスのmap()メソッドを使おうというものです。知ってる人には今更ですが、Option#map(f)は、レシーバーの値がSome(v)の場合は、fにvを渡した結果のSome(f(v))が、Noneの場合はNoneが返ります。したがって、パターンマッチを使った以下のようなコードは val result = exp1 match { case Some(v1) => val vx = //expression using v1 Some(vx) case None => None } 常に以下のような形に書き換えることができます。 val result = exp1.map{v1 => val vx = //expression using
みなさんこんにちは、技術部Webチームリーダーの田中佑樹です。 みんなからはたなやんと呼ばれています。猫とVimが大好きです。 さて、今回は先日開催した2泊3日のChatWork開発合宿の全貌についてご紹介したいと思います。 「開発合宿をやってみたいけど、どうすればいいのかよくわからない」という方の参考になれば嬉しいです。 なぜ開発合宿をすることになったのか? チャットワークは2011年3月の公開以来、順調にユーザー数を伸ばし2014年4月時点で世界170カ国42,000社の企業に導入されるまでに成長しています。 そんな中、現在チャットワークのバックエンドで動いているプログラムが今後の運用において最適ではないのではという懸念があり、言語とフレームワークの再選定をしようという声が上がりました。 ただ、なかなか日頃の業務の中で時間を取るのは難しく、今後のチャットワークを左右する重大な選択なので
val is better than Java's final? JavaScript hoisting var r = double(1) + triple(1); function double(x) {return x * 2;} var triple = function(x) {return x * 3;} Throws: java.lang.NullPointerException at Vals.<init>(Vals.scala:2) Simplified class Vals { println(answer) private[this] val answer = 42 } Prints... 0 return in lambda def samples(xs: TraversableOnce[Int]) { xs map {x => return x * 10} for
はじめに 初めまして。 2011年度入社のつちはしと申します。 アメーバのゲーム部門でエンジニアをしています。 今回はエンジニアブログを書く機会を頂きましたので、大好きな Scala について書かせていただきました。 「たのしさ」というとらえどころのない話しゆえ、すこしゆるーくなっておりますが、ご了承くださいませ。 というわけで、よく「Ruby は使っていて楽しいお 気持ちいいお」と聞くけど、 Scala も楽しいし気持ちいいんだよー! とゆうのを伝えたいです。。 伝わるといいです。。 (この記事は私が Scala の楽しいと感じる部分に的を絞って書いています。 Scala には楽しくない部分もいろいろありますが、それに関してはここでは触れません。 Scala たんは俺の嫁) さくっと書いてためしてみることが出来るの 本題に入る前に。。 Ruby には irb という、その場でプログラムを
Scala.js 1.15.0 Harness the Scala and JavaScript ecosystems together. Develop robust apps for browsers, Node.js, and serverless. Strong typing guarantees your code is free of silly mistakes; no more mixing up strings or numbers, forgetting what keys an object has, or worrying about typos in your method names. Scala.js takes care of all this tedious book-keeping for you, letting you focus on the ac
夏休み前の小ネタ、第2弾。 今日、やたら目にしたこちらを見て。 RubyでGUIアプリを作るならJRuby+JavaFX+Rawrで決まり! http://blog.supermomonga.com/articles/jruby/javafx-rawr.html ScalaとGroovyで、JavaFXを使って同じようなことをやっていました。 あ、最初に注意事項。 ScalaFX、GroovyFXはおろか、JavaFXも触ったことない人が書いてます あくまで、「同じ画面が出るまで」のところをやっただけで、exeファイル化とかは一切ノータッチです とはいえ、少しだけJavaFXに興味はあったので、勢いでマネしてみました。名前を先に出しちゃいましたけど、ScalaFXとGroovyFXで。 ScalaFX http://code.google.com/p/scalafx/ GroovyFX h
アドヴァンスト・ソフト・エンジニアリング(ASE)は、プログラミング言語「Scala」での開発を得意とするソフトハウスだ。これまでのScalaでの受託開発の実績は、官公庁や金融系企業、Webサービスの企業など5件以上に上る。 同社は従来、JavaやRubyでのシステム開発を中心に手掛けていたが、2010年にある金融系企業からScalaでの開発を打診され、利用したことをきっかけに、「技術者がScalaは面白いと気に入り」(同社技術開発部部長の藤川茂章氏)、人材育成を強化。それ以降、Scalaのスキルを持った人材がいることを会社の強みとして打ち出すようになった。 以前は大手ベンダーからの二次請けの案件が多かったが、Scalaに取り組み始めたことを機に「Scalaでぜひ開発してほしいと、ユーザー企業から直接当社に指名が入り、案件を獲得できるケースが増えてきた」(藤川氏)という。現在進行中の案件で
Twitter Engineer Talks About the Company's Migration from Ruby to Scala and Javaを翻訳しました。 ※ Google翻訳ツールキットの試行も兼ねています。 TwitterはRuby on Rails を活用していることで有名ですが、サービスが拡大していくにつれて、コードの一部を他の技術に移行してきています。同社はバックエンドのメッセージキューの実装をScalaに移行 することから始め、バックエンドの検索をJavaで再構築することを継続し、最近では検索処理のフロントエンドを Java サーバに置き換えました 。 InfoQは、Twitterのエンジニア、エヴァン・ウィーバーにインタビューを行いました。彼は、この変革についてより詳しく説明いてくれています。 興味深いのは以下のポイントです。 Twitterでよく使われ
Scala.jsはScala製、Scala Licenseのオープンソース・ソフトウェアです。 JavaScriptはスクリプト言語であり、コンパイル系言語を使っているプログラマーにとっては使い勝手が悪いと感じてしまうようです。もしあなたがScalaの使い手であれば、ScalaでWebフロントエンドを開発できるScala.jsを使ってみましょう。 サンプルです。パッケージやオブジェクトが使えます。普通にScalaが記述できます。コンパイルを実行してJavaScriptファイルを生成します。 ソースマップに対応しており、コンソールからScalaのソースに飛ぶことができます。 WebとあってDOMの操作ももちろんできます。 入力を受け取って処理も行えます。 引数として入力内容を受け取って処理を行うこともできます。 jQueryとの連携もできます。 jQueryのイベントを呼び出した処理も行えま
[注意] この文章を読むと、既存のRubyコードをScalaでrewriteしたくなる、 Rubyコードで型チェックをやるのが鬱になる、Ruby案件でやる気が出なくなる、 などの幻覚や異常行動が報告されています。 現在関わっているプロジェクトや家族のことを常に意識し、 気を強く持って冷静に読むとよいでしょう。 "コーディング時間の半分をテスト作成に費やさなければならなかった"(p.3)"Railsによって得られた生産性の向上は、テスト作成の作業に失われてしまいました"(p.3) まさにここ数年私が抱いてた漠然としたストレスの正体が、的確に文章となっていたからだ。そしてほどなく、「あ、この機能がRubyに欲しかっ た!」という驚きと共に Scala が本物であることに気付いた。さらに読み続けていくと、その驚きの回数は減るどころか、最後にはため息へと変わっていった。 はぁ...そんなんまででき
なぜScalaがバカ向けなのか。 ぼくの経験を元に、バカ向け言語と非バカ向け言語を比較しながら見て行きましょう 非バカ向け言語 C プログラマーとして最初に携わったのがC言語です。 それは以下のようなものでした。 何十ものファイルにまたがるグローバル変数 緻密な制御が必要であるにも関わらず、無秩序に取得/開放が行われているメモリー管理 このような複雑な構造を、ぼくのようなポケコン並の処理能力しか持たないバカに把握可能でしょうか。もちろん不可能です そこで、次のようなコーディングを心がけました。 グローバル変数を使わず、関数に引数を定義して渡す メモリーの取得/解放を同一ファイル内に限定する これで、メモリーや変数参照の影響範囲を限定し、ぼくのようなバカでも理解できるようになります。 ですが、わざわざそんな事をやらなくても全てを理解できるエリート様達は、 「なぜ引数で渡すんだ。グローバル変数
The document discusses DWANGO's use of Scala and the Play framework to build APIs for niconico's Android app. It summarizes the project's history and team structure, describes the core library, API server, and management server built using Scala, and outlines some pros and cons they experienced like case class limitations, Jenkins memory issues, and Akka exceptions in Play.Read less
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く