並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 72件

新着順 人気順

println javaの検索結果1 - 40 件 / 72件

  • その例外、いつキャッチするの?

    はじめに 最近、若手のコードレビューをしていて例外の使い方を教える機会があったので、ブログの方にもまとめたいと思います。今回はバッチ編。オンラインだとまた少し違う観点があると思います。また、言語はJavaを前提していますが考え方は例外機構をもつ言語ならあまり変わりません。 TL;DR 例外は原則キャッチしない。バッチは速やかに殺せ 個別箇所でログを出さずに必要な業務情報はExceptionを入れ子にして乗せる 長いバッチのためにはスキップもやむなし 原則、例外はキャッチしない JavaにはErrorとExceptionが存在し、OutOfMemoryErrorとかプログラム上ではどうしようもないものがエラー、ファイルが存在しない(FileNotFoundException)とかプログラム側でハンドリングするもの、と教科書では習うと思います。なのでException系はキャッチするものと、と

      その例外、いつキャッチするの?
    • 時代がstaticおじさんに追いついてきた(追記あり) - きしだのHatena

      この文章みてください。 オレはもう20年以上システム業界にいるけどな、その長い経験から言うと、オブジェクト指向なんてものは、理論としては面白いけど、およそ実用的とは言い難いものだな。まぁ、例えばGUIのコンポーネントとかはオブジェクト指向に基づいて作られているようだから、そういうツールとかを作る人には必要なものなのかもしれない。しかし君たちがいずれ作ることになる業務アルゴリズムにはまったく無縁のものだと思ってもらって間違いない。どうもこの業界、オブジェクト指向でなければダメ、というような風潮がまかりとおっているけどな、オブジェクト指向なんか本当に使っている人はほとんどいないよ。オレも少し勉強してみたけど、カプセル化とかポリ何とかとか、どうにも利点が理解できなかったね。実際、実業務で使ったことなどないしな…… 「またお前、オブジェクト指向の話をしてるのか」と思ったかもしれませんが、2010年

        時代がstaticおじさんに追いついてきた(追記あり) - きしだのHatena
      • じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル

        先日こういうツイートが流れてきた。 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。— 遊撃部長F/S&RWAs (@fstora) 2024年6月6日 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。 普段我々がゴリゴリ馬車馬のように使っているソフトウェアでよく利用されている浮動小数点型、すなわちfloatやdoubleなどは特定の算術に弱いことが知られている。というかもうこの手の話題はあまりに拡散されてしまったので、なぜかネット民はみんな知っている基礎教養、三毛別羆事件とかデーモンコアみたいな感じになっている。 ちなみにこれはCOBOLかそうではないか、という軸が問題になっ

          じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル
        • 【ソフトウェア設計】モジュールをどう分割するのか?

          はじめに 前々回や、前回に引き続き、ソフトウェア設計の指針に関する話をしたいと思います。 関数やクラス、そしてサービスなどシステムの塊の単位をモジュールと呼び、モジュールを作る事で、認知負荷を下げ複雑性と戦うという話をしてきました。では、モジュールは「いつ」分割するのが良いでしょうか? また、他にも共通モジュールを不用意に作ってしまって苦労した人も多いのでは無いでしょうか? 今回はそのあたりの話をしていきます。 TL;DR 以下があればモジュール設計を見直す 単純な要件/普段の利用に対して、タイプ量や約束事が多い 共通モジュールが「使われ方」に依存する モジュールの役割を一言で説明できない コード管理や性能/データ整合性など利用に際してのペナルティが高い 分割 is NOT 正義 - FizzBuzz Enterprise Edition 複雑性を排除するためにモジュール分割をすることは重

            【ソフトウェア設計】モジュールをどう分割するのか?
          • JSONの差分を取ってJSON Patchを得るにはdiffsonがおすすめ - Lambdaカクテル

            こういうツイートを見た。 Scala (or Java) で、jsonのdiffをpatchファイルみたいな感じでわかりやすいテキストで出力してくれるライブラリないかなあ。そしてjacksonに依存してないといいな— Arthur (@Arthur1__) 2024年1月13日 現代のプログラミングではJSONの差分を取ったり、逆にパッチを当てるということがよくある。可能ならそれがPretty Printできると良い。 JSONの差分をScalaで取る方法についていくつか調べてみたのでメモ。 JSONの差分をどう表現する? JSON Patch diffson diffsonでJSON Patchを生成する diffsonでJSON Patchを適用する diffsonでJSON Merge Patchを生成する diffsonでJSON Merge Patchを適用する JSON Pat

              JSONの差分を取ってJSON Patchを得るにはdiffsonがおすすめ - Lambdaカクテル
            • WebAssembly の過去・現在・未来 - Qiita

              はじめに WebAssembly (略して Wasm) では WASI や WIT、 Component Model など様々な仕様があります。 それぞれが登場した背景、モチベーションなどを理解することでなんとなく概要を掴んでいくことができるのではないかと考えたため、過去・現在・未来と時間軸で整理してみました。 まず Wasm とその特徴に関して簡単に紹介した後、Wasm の過去として生まれた背景やモチベーションを紹介します。 そして現在の Wasm がなぜ注目を集めているのか、そして現在策定中の仕様と目指している未来について紹介します。 WebAssembly とはなにか WebAssembly はスタックベースの仮想マシン用バイナリ命令フォーマットの仕様です。Wasm と略されます。 Wasm ファイル(Wasm モジュール)は一般に .wasm という拡張子で表されるバイナリファイル

                WebAssembly の過去・現在・未来 - Qiita
              • これだけ読めばOK!Scalaの環境構築2023 - Lambdaカクテル

                自分は、仕事でScalaを数年間・プライベートな経験を含めると10年弱のScalaの経験がある、そこそこの熟練Scalaエンジニアだ。チームにメンバーが入ってきたり他人に勧めるたびにScalaの環境構築を教えている一方、最新の知見を反映した記事が無くて他人に勧めづらかったので、自分が書くことにした。 現在ある記事 けっこう古びている 覚えながら書かれていることが多いのでやや曖昧な箇所がある(でもありがとう!) 最新のツールが利用できておらず無駄が多い 網羅的でない 今回目指す内容 最新の知見を活用して最短距離を目指す 何もない状況から一通りのツールが揃う所を目指す Scalaの環境構築は年を追うごとに簡単になってきているので、大多数の読者は引っかからずに進めるようになっているはず。 Scalaは基本的にJVMで動作する言語だ。このため環境構築にはJVMのセットアップも含まれるのだが、それに

                  これだけ読めばOK!Scalaの環境構築2023 - Lambdaカクテル
                • インターフェースと型クラスの違いを考える

                  この記事では、JavaライクなインターフェースとHaskellライクな型クラスを比較します。どちらも、複数の異なる型を統一的に扱うための仕組みです。 インターフェース インターフェースはご存知の方も多いと思いますが、コード例を載せておきます。 // インターフェースの定義 interface Greetable { String greet(); } // 実装の例1 class Hello implements Greetable { String message; Hello(String m) { this.message = m; } public String greet() { return "Hello " + message + "!"; } } // 実装の例2 class Goodbye implements Greetable { public String gree

                    インターフェースと型クラスの違いを考える
                  • 「Java 21」正式リリース。仮想スレッドが正式版に、入門者向けに「void main」と簡潔な記述、世代的ZGCなど新機能

                    「Java 21」正式リリース。仮想スレッドが正式版に、入門者向けに「void main」と簡潔な記述、世代的ZGCなど新機能 オラクルはJavaの最新バージョン「Java 21」正式版を今日リリースします。 Java 21は長期でセキュリティパッチやバグフィクスなどが提供されるLTS(Long Term Support:長期サポート)版です。企業向けのシステム開発などで安定したJavaのバージョンをある程度長期間使いたい場合には、このJava 21は有力な候補となるでしょう。 日本時間22時からJava 21のローンチイベントも開催予定です。「with a few surprise reveals」(いくつかサプライズ発表があるよ)というのが少し気になります。今年は昨年復活したJavaOneがないので、その代わりに何かあるのでしょうか。 We're just 1 day away fro

                      「Java 21」正式リリース。仮想スレッドが正式版に、入門者向けに「void main」と簡潔な記述、世代的ZGCなど新機能
                    • あらゆるプログラミング言語の最先端を行くScala 3のマクロ - 貳佰伍拾陸夜日記

                      この記事はScala Advent Calendar 2023の11日目です. 最近, 趣味でScala 3のコードをだいぶ書いていて, マクロの使い心地のよさに感心しました. 理論的な背景も含めて, 産業界で多く使われているプログラミング言語の中では筆者の知る限りぶっちぎりに優れたマクロを備えています. 他の言語にも見習ってほしいですね. たぶん見習おうとすると処理系を作り直す羽目になりますが. この記事ではScala 3のマクロのすごいところを例を使って紹介します. マクロの実践的な例 準備 実践的な例: NamedArray – 名前でアクセスできる配列 NamedArrayのマクロ実装 記述が明瞭 メタレベルのプログラムの扱い クォートとスプライスがある パターンマッチもある 生成コードに型がつく 多段階計算に基づいている クォートとスプライスの本当の意味 ネストしたスプライス ネ

                        あらゆるプログラミング言語の最先端を行くScala 3のマクロ - 貳佰伍拾陸夜日記
                      • JDK 21 の開発者向けの新機能 - 赤帽エンジニアブログ

                        Red Hat のソリューションアーキテクトの瀬戸です。 この記事はRed Hat Developerのブログ記事、What's new for developers in JDK 21 | Red Hat Developer を、許可をうけて翻訳したものです。 Java開発者にとってエキサイティングな情報として、今年 9 月 19 日に JDK 21 がリリースされました。 このリリースには、仮想スレッド(Virtual Thread)、レコードパターン(Record Patterns)、順序付コレクション(Sequenced Collections)など、Javaのエコシステムに利益をもたらす多くの新機能が含まれています。JDK 21 のプレビューには、文字列テンプレート(String Templates)、スコープ付値(Scoped Values)、構造化並列処理(Structure

                          JDK 21 の開発者向けの新機能 - 赤帽エンジニアブログ
                        • 日本語の単語を適切な位置で区切って読みやすく改行してくれる軽量でオープンソースなライブラリ「BudouX」の機能&採用例&デモはこんな感じ、Chrome 119に実装予定で簡単に利用できる見込み

                          日本語のページをブラウザで見ているとおかしな位置で改行されることが多いのですが、単語と単語の間にスペースを入れる英語などと異なり、日本語では分かち書きがされていないのが原因。単語の途中で文章が折り返されてしまう原因になっています。BudouXは機械学習モデルを利用して容量を抑えつつ、サードパーティーのAPIやライブラリに依存せずに分かち書きを行ってくれるオープンソースライブラリなので、読みやすい改行が実現できます。 Google Developers Japan: BudouX: 読みやすい改行のための軽量な分かち書き器 https://developers-jp.googleblog.com/2023/09/budoux-adobe.html BudouXの使用イメージは下図の通り。従来は画面幅によっては「最先端」や「テクノロジー」などの単語の途中で改行が行われてしまう事がありましたが、

                            日本語の単語を適切な位置で区切って読みやすく改行してくれる軽量でオープンソースなライブラリ「BudouX」の機能&採用例&デモはこんな感じ、Chrome 119に実装予定で簡単に利用できる見込み
                          • Java Persistenceを使ったアーキテクチュア:パターンと戦略

                            図1:データベースとJavaプログラミング言語のミスマッチ このギャップを埋め、Javaアプリケーションとデータベースのシームレスな接続を実現するために、私たちはさまざまなデザインパターンとアーキテクチャアプローチに依存している。これらのパターンはトランスレータとして機能し、インピーダンスのミスマッチの影響を軽減し、2つの世界を調和して動作させるのに役立つ。 これらのデザインパターンは、車輪の再発明ではない。これらは、アプリケーションとデータベースのパラダイム間のインピーダンスのミスマッチを緩和するのに有効であることが証明されている、確立されたソリューションである。Driverパターン、Mapperパターン、Active Recordパターン、Repositoryパターンなどがある。 Java Persistenceにおけるデータパターンのナビゲート このセクションでは、アプリケーション開

                              Java Persistenceを使ったアーキテクチュア:パターンと戦略
                            • Lensを始めとするOpticsがプログラミングをどう変えるか / 複雑なデータのモデリングをサボるには - Lambdaカクテル

                              仕事でLensを使う機会があった。Lensは複雑で入り組んだデータ構造の読み書きに非常に効果的な手法であるにもかかわらず、関数型プログラマ以外にはあまり知られていないように思える。 そこでこの記事では、Lensとは何なのか、なにが良いのか、具体的にどのようなケースでLensが役立ったか、そしてLensの亜種について紹介する。業務でも使ってます! AIくんが考えるLens 前提条件 Lensとは Lensの使いどころ データをモデリングする場合 (とても つらい) Lensを使う場合: Lensはアクセスパスである Lensと愉快な仲間たち Lensの合成 -- andThenでひっつけよう Lens Law Monocleの便利機能 Lensの自動生成でサボる Focusでもっとサボる Lensがもたらしたもの まとめ あわせて読みたい 前提条件 この記事ではLensを紹介する言語としてS

                                Lensを始めとするOpticsがプログラミングをどう変えるか / 複雑なデータのモデリングをサボるには - Lambdaカクテル
                              • エクセル読み込みをPOIからFastExcelに置き換えてパフォーマンスを改善する

                                はじめに こんにちは!10 月から株式会社ログラスでエンジニアをやっています、Kyosuke です! ログラスでは、エクセルファイルをプログラムから操作する処理が一部存在しており、Apache POIというライブラリを使用しています。(以後POIと呼びます) しかし、POI には処理方式によってはメモリを多量に使用してしまうという問題があります。 今回はその対応として、まずエクセルファイルの読み込みをFastExcelというライブラリに置き換えた話を振り返っていきます。 TL;DR POIのXSSFWorkbookは、ファイルをメモリ内に読み込んで操作するため、大きなエクセルファイルを処理する際にファイルサイズ以上のメモリを必要とすることがある POI の公式ドキュメントより FastExcelは、POIより機能は劣る代わりに、読み書きともにパフォーマンスは大幅に上回る 書き込み Fast

                                  エクセル読み込みをPOIからFastExcelに置き換えてパフォーマンスを改善する
                                • LogLog Games

                                  The article is also available in Chinese. Disclaimer: This post is a very long collection of thoughts and problems I've had over the years, and also addresses some of the arguments I've been repeatedly told. This post expresses my opinion the has been formed over using Rust for gamedev for many thousands of hours over many years, and multiple finished games. This isn't meant to brag or indicate su

                                  • Java 22新機能まとめ - Qiita

                                    Java 22が2024/3/19にリリースされました。 https://mail.openjdk.org/pipermail/jdk-dev/2024-March/008827.html The Arrival of Java 22! LTSではなく正式採用された機能も少ないですが、Gathererは出番も多そうなAPIなのでチェックしておきましょう。 また、非互換性として、Javaソースの直接実行でパッケージとディレクトリの対応が厳しくなっているので注意が必要です。 JDKをインストールせずに言語やライブラリの新機能を試したい場合にはJava Playgroundが便利です。 https://dev.java/playground/ Samplesに新機能のサンプルがあります。 資料 詳細はこちら JDK 22 Release Notes Java SE 22 Platform JSR

                                      Java 22新機能まとめ - Qiita
                                    • Scala 3のマクロTips 100連発 - 貳佰伍拾陸夜日記

                                      この記事はScala Advent Calendar 2023の12日目だ! Scala 3のマクロを書く上で役に立つ, メタれたTipsたちを紹介するぜ! 勢いに任せて書いていくからサンプルコードがちゃんと動かなかったらごめんな. 一応, Scala 3.3.1を想定しているぞ. マクロ 1. メソッドをマクロとして定義する 2. マクロの本体を実装する 3. マクロ実装の記法の意味を知る 4. マクロで生成されるコードの内容を確認する 5. 引数の式を評価せずに使う 6. 返り値の型をマクロの実行結果によって決める 7. マクロの返り値の型を制限する 8. マクロの返り値の型を書かない 9. マクロで計算された型をテストする 10. マクロで計算された型をScalaTestでテストする 式 11. 定数式の値を得る 12. 定数式でなければコンパイルエラーにする 13. 定数値の式を作

                                        Scala 3のマクロTips 100連発 - 貳佰伍拾陸夜日記
                                      • Amazon QをVSCodeでつかってみた - NRIネットコムBlog

                                        はじめに Amazon Qとは VSCodeでAmazon QにChatする セットアップ 質問してみる 余談:Chatでエラー発生 Javaコードのバージョンアップ(未検証) まとめ はじめに こんにちは、高橋です。 先日AWS re:Invent2023に行ってきました。 Keynoteで発表されたAmazon Qについて、VSCodeで使ってみた感想を簡単にまとめようと思います。 Amazon Qとは Amazon QはAmazonによって開発された生成型AIアシスタントです。このツールは、特にAWS(Amazon Web Services)のエコシステム内で開発者やIT専門家を支援するよう設計されています。Amazon Qは自然言語処理を用いて、ユーザーが提出する質問や要求に応じて迅速かつ効果的な解決策を提供します。 Amazon Qには以下の種類がありますが、今回はAmazon

                                          Amazon QをVSCodeでつかってみた - NRIネットコムBlog
                                        • JavaScriptでScalaのFutureを表現する

                                          はじめに Scala.jsというプロジェクトがあります。 Scalaで書いたプログラムをJavaScriptに変換する、とてもクールなツールです。 ただ、もちろん言語自体が違うため、完全なマッピングが可能な訳ではありません。ベストエフォートでセマンティクスを維持したままJavaScriptに変換しますが、いくつか対応付けが困難なケースがあります。 その中でも特にScalaの Future をJavaScript上でどのように表現するか? という点に関しては、JavaScriptの深みを知れるとても良い題材だと思ったので、まとめてみようと思います。 ※ 一応Scala.jsをネタに出してますが、Scalaを知らなくても理解できるように書いたつもりです。 ScalaのFuture Scalaには並列処理を行うためのデータ型として Future があります。 Future は、ある時点において利

                                            JavaScriptでScalaのFutureを表現する
                                          • ScalaのビルドツールMillが生成するUberjarはZIPファイルの面白仕様を使ってシェルから直接実行できるようになっている - Lambdaカクテル

                                            プログラミング言語Scalaで最もよく使われているビルドツールといえばsbtだ。起動しっぱなしのインタラクティブ仕様なsbtがやや鈍重なきらいがある一方、もう1つのビルドツールであるMillが開発されており、こちらではnpmのようなシェル単位の操作体系を指向している。 mill-build.com 単にコマンド体系のみならず、Millには他にも色々と面白い機能がある。例えばsbtと違って標準でassembly、すなわちUberjarへのパッケージング機能が搭載されているという点がありがたい。このUberjarを作る機能に面白い仕組みが盛り込まれていたので紹介するというエントリ。 謎の実行権限 中身を覗く ZIPは任意の場所に任意のデータを封入できる 追記 さて、JVM言語にあまり縁がない読者のために説明しておくと、Uberjarとは、依存する関連モジュールが1つのパッケージにまとめられ、J

                                              ScalaのビルドツールMillが生成するUberjarはZIPファイルの面白仕様を使ってシェルから直接実行できるようになっている - Lambdaカクテル
                                            • Goroutines in Go (Golang) - Welcome To Golang By Example

                                              This is the  chapter 23 of the golang comprehensive tutorial series. Refer to this link for other chapters of the series – Golang Comprehensive Tutorial Series Next Tutorial – Channel Previous Tutorial – Iota Now let’s check out the current tutorial. Below is the table of contents for current tutorial. Overview Goroutines can be thought of as a lightweight thread that has a separate independent ex

                                                Goroutines in Go (Golang) - Welcome To Golang By Example
                                              • OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル

                                                最近OpenAIがオーディオ系のAPIをいくつか出していた。といってもけっこう前の話だ。 そんな中、最近OpenAIが色々なサービスを展開している。自分も触って習熟しておいたほうが、面白いアイデアを思い付いたときにすぐにプロダクトを作れて役に立つはずだ。そういうわけで色々APIを見ていたところ、その中でも面白そうだった書き起こしAPIを使うことにした。自分が喋った内容を書き起こしてもらいたい。上手くいくだろうか?ボソボソ喋るオタクボイスでも? openai.itshinan.jp このAPIを使うと、オーディオ音声(wavとかflacとか色々な入力形式を使える)から各言語の書き起こしをやってくれる。イクゾー 素材音声 小銭を払う Scalaから呼び出す 所見 まとめ 素材音声 今回用意した自分の音声はこれ。過去の自分の記事の内容の一部をボソボソ読み上げている。お世辞にも上手ではないし、AP

                                                  OpenAIのAudio Transcription APIで遊んだ - Lambdaカクテル
                                                • プログラミング言語よりも先にデバッガーの使い方を覚えよう - Qiita

                                                  はじめに プログラミング学習の初期段階では、多くの教育カリキュラムが言語の文法や基本的な構造に焦点を当てがちですが、現実のソフトウェア開発においてはデバッガーの習得が非常に重要です。実際に、デバッガーを使いこなすことは、開発プロセスを加速し、問題解決の能力を飛躍的に向上させることができます。この記事では、デバッガーをプログラミング言語の学習よりも優先して習得すべき理由と、その方法について詳しく解説します。 デバッガーの基本機能 デバッガーは開発者がコードの実行を細かく制御し、プログラムの挙動を詳細に分析できるツールです。主要な機能には、ブレークポイントの設定、ステップ実行、変数の値の監視と変更が含まれます。これらの機能を用いることで、開発者はコードの特定の行で実行を一時停止させ、プログラムの内部状態を詳しく調査し、バグの原因を正確に特定することが可能になります。 実際によく使用する機能 コ

                                                    プログラミング言語よりも先にデバッガーの使い方を覚えよう - Qiita
                                                  • 刮目せよ!! 2023年秋、TS連携もファイルサイズもUIもイケるようになった最近のScala.js事情の紹介 - Lambdaカクテル

                                                    最近Scala.jsの話をすると結構な人がRTしてくれる。TypeScriptの他にAltJSには今どんなのがあるのかな、という話に引用RTでScala.js今アツいですよという話をしたら結構ウケた。世間的にはTypeScript alternativeに興味がある人も多いようだ。一方、ネットに残っているScala.js情報は数年前のものが多いようで、あまり積極的に日本語での情報発信がなされていない様子。そこで、ここ最近Scala.jsはどういう感じなのか、そしてどうすれば始められるのかという情報をまとめると需要があるかもしれないと思い、書くことにした。 Scala.jsは数年前まではオモチャみたいな感じだったんですが最近はTSのライブラリから自動で型が生える仕組みがあったりめちゃバンドル小さくなったりとめちゃくちゃ進化してます!! https://t.co/c06IZGWhYF— Win

                                                      刮目せよ!! 2023年秋、TS連携もファイルサイズもUIもイケるようになった最近のScala.js事情の紹介 - Lambdaカクテル
                                                    • AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう - Lambdaカクテル

                                                      この記事は、Scala Advent Calendar 2023の5日目の記事です。 qiita.com 大遅刻してしまいましたが、Scalaは遅延評価できるのでモーマンタイですね。 この記事では、Scalaをクラウドネイティブな環境で使う例の紹介として、ScalaをJavaScriptコードにトランスパイルしてAWS Lambdaで動作させる方法を紹介します。 愉快な遠足の始まりだ!!! Scalaプラットフォームの発展 Scalaはクラウドネイティブ時代に乗り遅れている?(いえいえ) 想定環境 Scala.jsで快適にLambda関数を書いてみよう 最低限のScala.jsを実装する 設定 トランスパイル Scala.jsコードをLambda関数の呼び出し規約に合わせる 規約を実装する Lambda関数を作成する イベントなどの入力 ここまでのまとめ Scala.jsでライブラリを利用

                                                        AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう - Lambdaカクテル
                                                      • Kotlin sealedタイプによる論理和型の実装: ポリモーフィズム形式と代数的データ型形式 - ドワンゴ教育サービス開発者ブログ

                                                        はじめに ポリモーフィズム形式の実装 ポリモーフィズム形式の実装の利点 ポリモーフィズム形式の実装の欠点 代数的データ型形式の実装 代数的データ型形式の実装の利点 代数的データ型形式の実装の欠点 まとめ We are hiring! はじめに Kotlinのsealedタイプ (sealed class と sealed interface) は、外部モジュールによるクラスの継承やインターフェースの実装 (以降は実装で統一します) を制限することで、継承先クラスの一覧を静的に取得できるようにする機能です。 以下は公式ドキュメントの例ですが、sealedタイプを使うことで log() 関数内の when が全てのとり得るパターンを網羅していることがコンパイル時にチェックされ、冗長な else を省くことができます。 また、Error インターフェースの直接の実装先が増えて when が網羅性

                                                          Kotlin sealedタイプによる論理和型の実装: ポリモーフィズム形式と代数的データ型形式 - ドワンゴ教育サービス開発者ブログ
                                                        • Javaオブジェクトを永続化させるEclipse Storeがよさそう - きしだのHatena

                                                          Eclipse Storeというのをみつけて、これはJavaオブジェクトを永続化するものなのだけど、トランザクションもあったりPostgreSQLなどのDBをバックエンドにできたり結構よさそう。 https://eclipsestore.io/ MicroStreamがEclipseに寄贈されてオープンソース化したものみたいですね。Eclipse Selializerとセットです。 https://github.com/microstream-one ということでGetting Startedをみてみます。 https://docs.eclipsestore.io/manual/storage/getting-started.html 組み込み版を使うのでこんな感じのdependencyを追加 <dependencies> <dependency> <groupId>org.eclipse

                                                            Javaオブジェクトを永続化させるEclipse Storeがよさそう - きしだのHatena
                                                          • Tagged Type(Branded Type)を使って飛行機の不時着や人工衛星紛失を防ごう / Scala 3ではTagged Typeを簡単に作れる - Lambdaカクテル

                                                            Tagged Type というテクニックがある(TypeScript界隈などではBranded Typeと呼ばれているようだ)。実行時の型としては同じだが、型システム上はこれを区別して別物として扱い、混同できなくする仕組みを作るためのものだ。 AIくん!サムネイラスト作って!と頼んで作ってもらった画像 Tagged Type 単位の取り違えによる事故は後を絶たない。世の中には、キログラムとポンドを混同して飛行機があわや墜落しかけたり、メートルとヤードを混同して人工衛星がどっかに行ったりしている。尊い人命や国民の血税と比べるといささか霞むかもしれないが、ユーザIDとペイロードを間違えて送信したり、金額と口座番号を取り違えて送金したり、秘密鍵と公開鍵を間違えて表示したりしてしまえば、プログラマが大変な苦労をするか、会社そのものが傾くだろう。 しかしながら、データとしてはどちらも同じDouble

                                                              Tagged Type(Branded Type)を使って飛行機の不時着や人工衛星紛失を防ごう / Scala 3ではTagged Typeを簡単に作れる - Lambdaカクテル
                                                            • 各言語の非同期処理の仕組みまとめ - Qiita

                                                              はじめに 非同期処理はアプリケーション開発においてほぼ必須となっていますが、プログラミング言語やライブラリによってその実現方法は大きく異なります。 この記事では、以下の言語における非同期処理の実現方法を調査し、分類した結果をまとめたものです。 JavaScript/TypeScript(Promise) Kotlin(Coroutines) Java(Reactor Core/Completable Future) Python(asyncio) Golang(goroutine/conc) Haskell(async) Rust(tokio) 非同期処理の分類 構文 async/await 採用している言語: JavaScript/TypeScript/Python/Kotlin/Haskell/Rust もっとも代表的な非同期処理の構文です。 asyncとawaitという対になる二つの

                                                                各言語の非同期処理の仕組みまとめ - Qiita
                                                              • Valkey GLIDE – Valkey と Redis OSS向けのオープンソースクライアントライブラリのご紹介 | Amazon Web Services

                                                                Amazon Web Services ブログ Valkey GLIDE – Valkey と Redis OSS向けのオープンソースクライアントライブラリのご紹介 本記事は 2024年7月9日に公開された “Introducing Valkey GLIDE, an open source client library for Valkey and Redis open source” を翻訳したものです。 2024年7月9日、私たちは Valkey General Language Independent Driver for the Enterprise (GLIDE) を発表しました。これは、オープンソースでパーミッシブライセンス (Apache 2.0 ライセンス) の Valkey クライアントライブラリです。Valkey は、キャッシュ、セッションストア、リーダーボード、メッセ

                                                                  Valkey GLIDE – Valkey と Redis OSS向けのオープンソースクライアントライブラリのご紹介 | Amazon Web Services
                                                                • Bevyを楽しく書くために、最低限必要なRustのTips 3選 - Qiita

                                                                  概要 Bevy Engineを初めて使う人にとって、Rust言語特有の壁があります。今回は特にハマりがちな点を3つ挙げてご紹介します。 前置き Bevy Engineは、ゲームエンジンと紹介されることが多いですが、個人的にはopenFrameworksなどと同様に、汎用的な開発フレームワークと捉えています。 Bevy Engineはとてもよく設計されていて、幅広い用途に活用できるのですが、良くも悪くも現状はRust言語専用に作られていて、Rust言語以外でも使えるようにしようとする動きはなくはないものの、現状ではRustで書かざるをえません。 Rustは、C++やJavaと比べても難易度は高く、Bevyは難易度を緩和する仕組みを設けてくれてはいますが、BevyとRustにはいくつかのハマりポイントがあります。 当記事では、特にRust言語特有の事情に焦点をあて、Bevyに初めて触れる際に、

                                                                    Bevyを楽しく書くために、最低限必要なRustのTips 3選 - Qiita
                                                                  • The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!) @ tonsky.me

                                                                    If you combine this with the Unicode table, you’ll see that English is encoded with 1 byte, Cyrillic, Latin European languages, Hebrew and Arabic need 2, and Chinese, Japanese, Korean, other Asian languages, and Emoji need 3 or 4. A few important points here: First, UTF-8 is byte-compatible with ASCII. The code points 0..127, the former ASCII, are encoded with one byte, and it’s the same exact byt

                                                                      The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!) @ tonsky.me
                                                                    • Ruby言語の進化を追いかけて意外な構文機能を発見した話(翻訳)|TechRacho by BPS株式会社

                                                                      概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Vignettes on language evolution: discovering an old syntax feature history 原文公開日: 2024/07/01 原著者: zverok 日本語タイトルは内容に即したものにしました。 私がこれまでまったく気づいていなかった、ある構文機能がRubyに存在します。 Rubyの進化をテーマにした前回記事を書きつつ(かつ今後出版する書籍の形式を構想しつつ)、私はRuby言語の歴史をどこまでも深く掘り下げ始めています。同時に他の言語についても調べ、あるソリューションが業界で広まったのがいつだったのか、逆にある手法が流行らなくなったのはいつだったのかを理解しようとしています。 Rubyについては、NEWSやChangelogファイルに目を通したり、変更された時期を独自に構

                                                                        Ruby言語の進化を追いかけて意外な構文機能を発見した話(翻訳)|TechRacho by BPS株式会社
                                                                      • 『Kotlin in Action Second Edition』を読んだ - Don't Repeat Yourself

                                                                        しばらくは忙しく過ごしていてなかなか技術書を読む余裕はありませんでしたが、ようやく一冊読めたのでメモを残しておきたいと思います。『Kotlin in Action』という本の第2版です。未邦訳らしかったので、原著を読みました。 なお、気になったところだけつまんで読んだので、すべての章のメモが記されているわけではありません。ほとんどの章はScalaの頃の経験で概念としては知っている状態だったので、あまり印象に残りませんでした。後半戦は比較的Kotlin固有の概念が多くそちらは印象に残りました。 Kotlin in Action, Second Edition (English Edition) 作者:Aigner, Sebastian,Elizarov, Roman,Isakova, Svetlana,Jemerov, DmitryManningAmazon 大前提ですが、Android側の

                                                                          『Kotlin in Action Second Edition』を読んだ - Don't Repeat Yourself
                                                                        • Functional Design: Principles, Patterns, and Practices - Qiita

                                                                          Functional Design: Principles, Patterns, and PracticesClojure読書感想文SOLID原則 クリーンコードやクリーンアーキテクチャなどの「クリーン」シリーズでお馴染みのUncle Bobの新刊です。クリーンは書籍タイトルに付きませんでした。 本書は関数型プログラミングに関する書籍ですが、関数型プログラミング言語と聞いて、真っ先に皆が思い浮かべるものではないであろうClojureを取り上げて、一貫してこれとオブジェクト指向プログラミング言語との比較がされています。 これは読み進めていくと、オブジェクト指向言語としてはC++やJavaを用いて、Clojureのコードを対比していくという構図を随所でとっており、これらとできるだけ距離の遠い言語を選びたかったのだな、というのが分かります。Clojureは関数型であり動的型付け言語です。この2つ

                                                                            Functional Design: Principles, Patterns, and Practices - Qiita
                                                                          • So, What's So Special About The Mill Scala Build Tool?

                                                                            So, What's So Special About The Mill Scala Build Tool? Mill is a Scala build tool that offers an alternative to the venerable SBT toolchain. Mill aims for simplicity by reusing concepts you are already familiar with, borrowing ideas from Functional Programming and modern tools like Bazel. Feedback from users of Mill is often surprisingly positive, with people saying it is "intuitive" or feels "jus

                                                                            • 【2023年版】今年生まれた新しいプログラミング言語を紹介! - Qiita

                                                                              はじめに あなたの好きなプログラミング言語は何ですか? これまで多くのプログラミング言語が生まれてきました。Wikipedia の言語一覧を見てみると、非常に多くのプログラミングが存在することを読み取れます。 しかし、近年、「人気な言語」や「よく使われる言語」のランキングを見てみると、順位の変化はありますが、出てくる言語はほとんど変わらなくなってきました。もちろん、人気の言語は人気たる理由がありますが、マイナーな言語にも個性があり、学んでみる価値があると思います。新たなプログラミング言語との出会いで、人生が変わることもあるかもしれません。 この記事では、最近生まれた新しいプログラミング言語をいくつか紹介します。人生を変えるようなプログラミング言語との出会いのきっかけとなれば幸いです。 また、おまけとして、「新しいプログラミングを探す方法」についても考えてみたので、新たな言語を探す旅に出たい

                                                                                【2023年版】今年生まれた新しいプログラミング言語を紹介! - Qiita
                                                                              • ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル

                                                                                Channelスタイルの並行処理の記述を(もちろん型安全に)可能にするライブラリOxについて調べて試してみた。結論から言うと書き味がめちゃくちゃ良くて面白い。 ソースコードも置いておく。 github.com Ox Oxとは、sttpなどの開発でお馴染のSoftwareMillによって開発されているScala用の非同期ライブラリである。まだ非常に若く、活発に開発されている。 github.com Oxの特徴は、というか目的といっても差し支えないのだが、それはChannel指向の非同期処理、つまりGoroutineをScalaの上で実現している点だ。Goユーザならすぐに理解できるだろう。 百聞は一見に如かず。こんな感じのコードを書くことができる(v0.0.25時点)。 import ox.* import ox.channels.* import scala.concurrent.durat

                                                                                  ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル
                                                                                • Cloudflare functions with Scala.js

                                                                                  Indoor VivantsAnton Sviridov. I love reinventing the wheel and I usually use Scala for that. TL;DR We are deploying an app to Cloudflare using Scala.js We are using ScalablyTyped We are using Scala 3 heavily Code on Github Deployed app Cloudflare API bindings Welcome to the "Put ma Scala on yo cloud" series I want to say that I'm kicking off a blog series, but even I don't believe that. If I did,