クラスの共通要素をまとめる

リビングのLEDシーリングライトにぼんやりした影が付いている。キッチンの同じ形のLEDライトと色合いが変わっている。奇妙に思ってLEDシーリングライトの蓋を取ってみると、LEDライトの基盤とプラスチックの透明なパーツが重なった部分が黒く変色している。キッチンの照明は、リビングに比べるとこまめに付けたり消したりしていたので、同じ部品でも変色していなかった。リビングの照明は付けたままにしておくことが多かったので、変質しやすくなっていた。棚にはメーカーの保証書があったけれど、すでに入居して1年が経っていたので、保証期間は少し過ぎている。据え付けの照明だったのでレシートなどは残っていなかった。とはいえ黒く変色したままにするのも不気味だったので、型番を控えてメーカーに問い合わせたところ、LEDライトのパーツが黒く変色する問題があることは知っているようだった。とはいえリモコンでの操作はそのまま使えるため、見た目を気にしなければ通常通り使えるとのことだった。保証期間は過ぎているが、変色しない同型のモデルと交換という形での対応になった。LEDでも基盤の発熱量が高いと変色することがあるようだ。そういった事例はLEDではなく電熱線によるヒーターの試行錯誤のときに基盤が変色することは何度か体験済みだった。ともかくメーカーに解決の手段があって良かったと考えている。

JAVAにおけるラムダ式は、関数型インターフェースを実装したクラスの宣言を短く記述するための構文になる。JAVAプログラムのインターフェースではメソッドの引数にクラスを付けて、メソッドにもそれと対になる構文を見つける必要があった。ラムダ式ではそれが簡潔になるようだ。とはいえ、省略すると今度は意味合いが分かりにくくなる場合もあり、クラス名とメソッドで明示的に記述されている方が、構文としては長くなるが判別しやすい場合もあった。これらを並べて記述するとどちらかをコメントアウトして検証していたが、2つのクラスに分けて、そのうち共通のクラスを外部クラスとして読み込むことにした。共通のクラスをクラスBとリネームすると、競合せずに共通化することができた。そのうえで個々のクラスで読み込まれていたクラスを削除して、クラスBをもとのクラス名に戻す。JAVAにおけるクラス名は、ファイル名と同じ名前になっている。もしクラス名を変えたい場合は、ファイル名も併せて変える必要がある。その操作をJAVAにおいてはリファクタリングというようだ。リファクタリングとは外部から見た時の挙動を変えずに構造を整理することだと定義されている。今回のクラス名をクラスBから元のクラスに戻すと、クラスが宣言された関連ファイルの呼び出しもクラスBからクラスに置き換わっていた。そういった意味では関数の宣言の置き換えが含まれている。ともかく、共通の定義がある2つのファイルから共通の要素を取り出して、一つの外部クラスにすることができた。またその際に内部クラスとして呼び出されていたクラスを、publicクラスに替えている。publicクラスは2つの別のクラスからもインスタンスとして呼び出すことができるが、1つのクラスについて、publicクラスは1しか記述できないルールになっている。そのルールを基づいて、プログラムで共通の部分を共通のクラスとして取り出すことができた。

またイテレータにHashSetだけでなく、クラスを作って配列のArrayListを使って登録された要素を一覧するプログラムを作った。とはいえ、ArrayListに要素を追加するときもHashSetと同じように.addメソッドで一行につき一つの要素で追加していく必要がある。カンマ区切りの文字列でまとめて追加する方法はまだ見つかっていない。イテレータを使えば、一つずつ全ての要素を取り出すというプログラムをひとまとまりにできている。調べてみると.addAllというメソッドで、配列を複数追加できるようだった。配列は変数がいくつか連なった入れ物のようになっている。これを効率よく配置できれば、プログラムを作りやすくなりそうだ。HashSetでは配列とよく似た構造を持っているが、順番を変えられないようになっていた。また、配列の箱の中をオブジェクトとして、その中でnewを用いてクラスをインスタンス化すると配列の要素として登録されている。ただ、数値のように並べ替えることはできないようだった。

今日は曇っていた、エアコンをOFFにして、窓を開けるようになってから1日経って9月になっていた。残暑はあまり感じなかったが、少し雨が含まれていたので、体感的には涼しかった。温度も30度を下回って28度くらいなっている。とはいえ、キッチンは風通しがあまりよくなくやや汗ばんでいた。外を散歩するには8月に比べると大分過ごしやすくなっている。喉もそこまで乾かなくなっている。なるべくは無理のない範囲で自炊ができればと思っている。ひとつのレシピを想定してその材料を見つけるという目的を散歩に持たせよと考えている。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です