リファクタリングの事象の地平線

これは経験則なのですが、ある程度を超えたスパゲッティコードはリファクタリングを試みても状況が改善しなくなります。ブラックホールから光が脱出できない事象の地平線になぞらえ、これをソフトウェア品質における事象の地平線と言い(ません— なぎせ ゆう…

Project Valhalla 2023

2023/03/30 にやったJava仕様勉強会の動画が公開されました。当日はJavaのマスコットDuke風の服で臨みました(どうでもいい裏情報)www.youtube.comセッション資料もアップロードしたので参考にしてください。Project Valhalla 2023 中間報告いずれも 2023年…

マウンティングの語源調査の仕方

前回、思い出話として nagise.hatenablog.jp を書いたのだが、その中でネットスラングの「マウンティング」について、初出が nagise.hatenablog.jp であるということを書いた。この記事は 2008年9月20日で、以下の用例が見られる。 そんなテクニックはいかに…

ゲームの歴史とハックルさんとの思い出

思い出話。今回はポエムと思って気楽に読んで欲しい。 インターネットの世界には情報が溢れかえっていて、やれ、なんやらが炎上しただのそんなニュースもありふれていて特に興味もわかない。ふーん、ゲームの歴史について書いた本が噓八百で炎上してんのか、…

リファクタリングの価値の考察

リファクタリングには価値がある、とプログラマは確信していることだろう。しかし、その価値が何であるか?を上手く説明できるかというと難しいのではないだろうか。本稿ではリファクタリングの価値をテーマに筆者の説を提示していく。 品質特性の側面から …

なぜ自動テストの導入は失敗するのか?

開発室の雑談。営業側のマネージャが言うには 「今のプロジェクトで自動テストの導入を試みている話をしたら、XXXさんのところでも過去にいくつか導入を試みたけどもみんな上手くいかなかったって話になって」 なるほど? まあ確かに自動テストはシステム開…

Javaのリテラル

コーディング規約「リテラル禁止」「null書くなって事ですかねw」「えっ?」「えっ?」— なぎせ ゆうき (@nagise) April 16, 2021 Q. リテラル(literal)とは何か? A. 言語によるなんでこんな記事を書いているかというと、リテラル禁止FizzBuzz大会がいま…

IT勉強会界隈の冬の風物詩といえば、飯テロ勉強会の異名を持つブリ会議 ―― burikaigi ―― だろう。 toyama-eng.connpass.comそもそも富山で旬の寒ブリを食べようというIT業界人の同好の士が、ブリを食べるために勉強会を催したというのが始まりである。飯テロ…

西暦1年は閏年か?

閏年(うるうどし)の話題。 Twitterで見かけた話題で「西暦1年は閏年かどうかぱっとわからん人おる?」という些か煽り気味のツイートを見かけたのだけども、反射的に「閏年じゃないに決まってるじゃん」とぱっと答えてしまわないだろうか。本当にそうだろう…

OSSの通らない自動テストを追いかけた話

備忘録。MyBatis Migrations の ソースコード を落としてきて自動テストを叩いてみたけども通らないテストがあったんですよ。(masterブランチ commit 29945670f2937e3c9f107d9f59e6b03d7e58926e 2020-10-19版) java.lang.AssertionError: Expected: (an inst…

Spring boot で作るAPIと React のビルドを共存させたい

Spring boot では Webシステムをmain起動のスタンドアロンのJavaプログラムのように起動して試せる点が便利である。ところでこうしたサーバーサイドのWeb APIを作るようなケースで、Reactのようなコンパイルを伴うWebクライアントと連携して動作するようなも…

セミコロンレスJava はチューリング完全か?

セミコロンレスJava (Semicolonless Java)というのは Java でセミコロンを使わずにコードを書くというチャレンジである。ネタであり言語の構文を駆使して行うプログラミングパズルの類の遊びである。(ときどき本気にしてその有用性について聞いてくる人がい…

Javaのクラス名の形式まとめ

Javaのクラス名の表現方法で「全部同じじゃないですか」「ちがいますよーーっ」「これだからしろうとはダメだ!もっとよく見ろ!」をやっている— なぎせ ゆうき (@nagise) April 14, 2020 Java言語を扱っていると何通りかのクラス名の表記法を見ることがある…

Enumeration を for-each ループする方法

Twitterで @RayStark77 氏に教えてもらった方法 var v = new java.util.Vector<String>(); java.util.Enumeration<String> e = v.elements(); for (String s : (Iterable<String>)e::asIterator) { // ... } Enumeration#asIterator() がJava9からのメソッドなので Java9 以降で利用</string></string></string>…

Javaのリスク考察 2018年版

Java10以降、Java SEのリリースサイクルを6カ月単位とすることが発表されてしばらく経ち、また、予告通りJava11からいよいよJavaのサポート体制も変更となった。 本稿ではJavaを使い続けるリスク、あるいはほかの言語ランタイムを使い続けるリスクについて検…

ジェネリクスと配列

Javaのジェネリクスは一般に配列と混ぜてはいけないとされるが、混ぜて用いた場合に何が問題となるのか。 歴史的な問題 Javaが1995年に登場した当時、Javaに配列はあったがジェネリクスはなかった。ジェネリクスを含む型システムの理論的な整備は、1990年代…

Java Generics Hell - new T()

Java Generics Hell アドベントカレンダー 24日目。 前回(22日目) イレイジャ 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。今回はJavaのジェネリクスでは型変数を用いてnew T()できないけど特に問題ないという話。 コンストラクタの形 コンス…

Java Generics Hell - イレイジャ

Java Generics Hell アドベントカレンダー 22日目。 前回(20日目) ブリッジメソッド 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 メソッドのオーバーロード Javaのジェネリクスのイレイジャについて語るには、まずメソッドのオーバーロード…

Java Generics Hell - ブリッジメソッド

Java Generics Hell アドベントカレンダー 20日目。 前回(19日目) 内部クラスと型変数のスコープ 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 共変戻り値 Java5以降ではメソッドをオーバーライドするときに、戻り値をより具体的な型としてオ…

Java Generics Hell - 内部クラスと型変数のスコープ

Java Generics Hell アドベントカレンダー 19日目。 前回(18日目) ジェネリックな例外 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。Javaでは1ファイルにトップレベルのpublicなclassはひとつしか置けないが、入れ子になったクラスなどを用意…

Java Generics Hell - ジェネリックな例外

Java Generics Hell アドベントカレンダー 18日目。 前回(16日目) 型変数のバインド 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 throws E Java のジェネリクスの型変数は例外のthrows宣言でも用いることができる。型変数の宣言時にthrow可…

Java Generics Hell - 型変数のバインド

Java Generics Hell アドベントカレンダー 16日目。 前回(15日目) ワイルドカード落穂ひろい 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 メソッドスコープの型変数 メソッドスコープの型変数へのバインドについては以前も書いたが再掲して…

Java Generics Hell - ワイルドカード落穂ひろい

Java Generics Hell アドベントカレンダー 15日目。 前回(14日目) http://d.hatena.ne.jp/Nagise/20171214/1513260215=反変ワイルドカード 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。共変ワイルドカードと反変ワイルドカードについて書いた…

Java Generics Hell - 反変ワイルドカード

Java Generics Hell アドベントカレンダー 14日目。 前回(13日目) 共変ワイルドカード 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 反変ワイルドカード さて、前回は共変ワイルドカードについてだった。今回は反変ワイルドカードについてで…

Java Generics Hell - 共変ワイルドカード

Java Generics Hell アドベントカレンダー 13日目。 前回(11日目) 型変数の境界 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 変性 パラメタライズドタイプについては以前に書いたが、ワイルドカードについては後回しということにしていた。<…

Java Generics Hell - 型変数の境界

Java Generics Hell アドベントカレンダー 11日目。 前回(8日目) インスタンススコープのジェネリクス 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。週末サボりました。すいません。 型変数の境界 ここまでは話を簡単にするために型変数の境界…

Java Generics Hell - インスタンススコープのジェネリクス

Java Generics Hell アドベントカレンダー 8日目。 前回(7日目) メソッドスコープのジェネリクス 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。ようやくクラスの型変数の話にたどり着いた。なかなか話題が多くて大変なのである……。 インスタン…

Java Generics Hell メソッドスコープのジェネリクス

Java Generics Hell アドベントカレンダー 7日目。 前回(6日目)ジェネリクスの構文 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。前回、構文の話をしていたが、そのなかでメソッドスコープのジェネリクスをいったんおいていた。 今回はそのあ…

Java Generics Hell - ジェネリクスの構文

Java Generics Hell アドベントカレンダー 6日目。 前回(5日目) パラメタライズドタイプ 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。ここまで話の簡単のためにいろいろ端折って書いてきているのだが、徐々に詳細を書かねばなるまい。同時に…

Java Generics Hell - パラメタライズドタイプ

Java Generics Hell アドベントカレンダー 5日目。 1日目 Java Generics Hell 序章 2日目 オブジェクト指向 3日目 リスコフの置換原則 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 パラメタライズドタイプ Javaのジェネリクス周りは一緒くた…