ScalaやKotlinはどのようなシステムを構築するときに強みを発揮しやすいですか?
最近、ScalaやKotlinに関する情報を多く耳にします。これらの言語は特定のシステム構築時に特に強みを発揮すると聞きました。具体的に、どのようなシステムやアプリケーション開発時に、これらの言語は他の言語と比較して優れていると言えるのでしょうか?また、それぞれの言語の特性や利点を考慮した場合、どのようなシチュエーションでの使用が推奨されるのか教えてください。 (編集済み)
1年前
view数 46
回答を投稿して企業にアピールしましょう!
Q&Aで投稿された回答は、
企業側に表示されるプロフィールにも投稿履歴として表示されます。
Offersにログイン・新規登録して、気になるテーマやトピックを話してみよう!
\回答があります!/
Offers(オファーズ) 公式
エンジニア
1年前
※本投稿は、2023年6月29日に開催されたイベント「KotlinとScala 活用者が語る技術選定のヒント(https://offers.connpass.com/event/287192/)」における、フリーランスエンジニア 竹端 尚人氏の回答内容を元にしています。
Kotlinで、実は革新的な機能というのはそんなにあるわけではないです。
革新的な機能だったり、何かの特定のドメイン特化して強いライブラリがあるとか。
例えば、Pythonがよくデータ分析で使われるとかそういう類のものはあまりないのですが、用途としてはやっぱりJavaとかに近づいてはくるので、結構オブジェクト指向としての機能をというのはしっかり持った上でそういう各機能を洗練された形で実装されているというような、そういった使いやすいところは本当に強みです。
よくあるのは、金融系のところとかでよく導入したいという話が多いのですが、硬めに設計したいとかそういうときに、やっぱり静的型付け言語で、かつオブジェクト指向もあってしっかりとした設計がしたいっていうようなとき、その上でちょっとモダンな形での実装したいというようなとき、言語として比較的ハードルが低いところを取りたいときに、ちょうどいい言語になってくるのかなとは思っています。
サーバーサイドの観点でいうとそこです。
あと、結構これは賛否両論あるのですが、例えばAndroidとKotlinをサーバーサイドでロジック共有したりできます。
KotlinはKotlin マルチプラットフォームというのがあって、Kotlinのコードから各プラットフォームのiOS、Linuxとかのネイティブ ライブラリ、AndroidはもちろんJVMのライブラリとして入ったり、JavaScriptのフロントエンドのライブラリを出力したりできて、各プラットフォームの報道共有をするみたいなこともできます。
これは主にどちらかというと、クライアントで同じような画面を各プラットフォーム実装するときに共有するの使うのですが、これはもちろんサーバーサイドがKotlinに実装されていれば、サーバーサイドと全クライアントとのロジックの共有みたいなこともできたりするので、またそういう使い方とかにもし興味があれば。
肝は「言語を統一しないでもロジックを共有できる」のが一つポイントです。
よくサーバーとクライアントで言語を統一してそれをやるというのはありますが、クライアントはクライアントで各自使いたい言語を使った上でそれを統一できます。view数 13Offers(オファーズ) 公式
エンジニア
1年前
※本投稿は、2023年6月29日に開催されたイベント「KotlinとScala 活用者が語る技術選定のヒント(https://offers.connpass.com/event/287192/)」における、Chatwork株式会社 テックリード 加藤 潤一氏の回答内容を元にしています。
品質を高めるっていうところでいうと、関数型の文化の中によく事例として出てくるのが、Property Based Testing、プロパティベースというのがあって、それに相対するのはExample Based Testingなのですが、テストするときに1の入力の場合、3の入力の場合に固定値を入れて、関数の入力に固定値を入れて試すと思います。テスト書くの。
そうではなくて、例えば要素が1つ以上で自然数が入っているみたいなプロパティを関数型で記述すると、Property Based Testingのツールがジェネレータというのがあるのですが、関数型でジェネレータというのを記述すると、その法則に合うデータを生成してテストをしてくれます。
この法則、ジェネレータで記述した自然数の要素が1個以上のリストというのを記述すると、それをサンプル数100パターンでやってくれと言ったら、全部違うパターンのケースを生成してテストしてくれるっていう機能があって、HaskellだとQuickCheckって言われるライブラリなのですが、たぶんいろんな言語で実装されていると思います。
元は完成型のカルチャーでできたもので、例えばそういった品質を上げる関数型の機能を使って品質を上げるみたいなこととか、あとパーサーコンビネータっていうのがあるのですが、構文解析、言語の処理系をつくるときインタプリタとかそういうのも関数型のモナドの記述をすると、すごい凝縮されたコードで、簡潔なコードで高度なことができたりします。
コード量圧縮したりというのが圧倒的に他の言語と違って関数型の機能を使って記述すると、そういうコード量を圧縮したりというのが、1文字あたりの意味というのを高めたりとか、そういうのができたりします。
そういったところに興味があったらわりと関数型の機能を使うっていうのは面白いんじゃないかなと思っています。 (編集済み)view数 9