Skip to Content
Javaへの関数的アプローチ
book

Javaへの関数的アプローチ

by Ben Weidig
March 2025
Intermediate to advanced
414 pages
5h 47m
Japanese
O'Reilly Media, Inc.
Content preview from Javaへの関数的アプローチ

第4章. 不変性

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

データ構造(データ値を格納し、整理するための構造)を扱うことは、ほとんどすべてのプログラムの中心的なタスクである。 OOPでは、これは通常、可変性のプログラム状態を扱うことを意味し、多くの場合、オブジェクトにカプセル化される。 しかし、関数型アプローチでは、不変性はデータを扱うための好ましい方法であり、その概念の多くの前提条件である。

Haskellのような関数型プログラミング言語や、Scalaのようなマルチパラダイムだがより機能的な言語では、不変性は一般的な機能として扱われている。 それらの言語では、不変性は必要不可欠なものであり、多くの場合、設計の後付けではなく、厳格に強制されている。 本書で紹介する他のほとんどの原則と同様に、不変性は関数型プログラミングに限定されるものではなく、選択したパラダイムに関係なく、多くの利点をもたらす。

この章では、JDKですでに提供されている不変性型と、JDKが提供するツールやサードパーティのライブラリの助けを借りて、副作用を避けるためにデータ構造を不変にする方法について学ぶ。

この章で使われる "データ構造 "という用語は、Collectionsやカスタム型のように、データをストアし、整理するあらゆる構造を表す。

OOPにおける可変性とデータ構造

オブジェクト指向言語であるJavaの典型的なコードは、オブジェクトのステートを可変性の形でカプセル化する。 そのステートは通常、「セッター」メソッドを使って変更可能である。 このアプローチは、プログラムのステートをエフェメラルにする。つまり、既存のデータ構造に変更を加えると、現在のステートがインプレースで更新され、それを参照する他の人にも影響し、以前のステートは失われる。

第2章で説明したように、OOP Javaコードで変更可能な状態を処理するために使用される最も一般的な形式、JavaBeansと plain old Javaオブジェクト(POJO)を見てみよう。 この2つのデータ構造とその明確な特性については、多くの混乱が存在する。 ある意味、どちらも普通のJavaオブジェクトであり、関連するすべての状態をカプセル化することで、コンポーネント間の再利用性を生み出すことを目的としている。 設計思想と規則は異なるが、同じような目標を持っている。

POJOは、ビジネスロジックの状態を "単に "カプセル化するものであり、不変性を持つように設計することもできる。 どのように実装するかはあなた次第であり、あなたの環境に最もマッチするものであればよい。 POJOは通常、可変性を持つオブジェクト指向のコンテキストでより柔軟性を持たせるために、フィールドに "ゲッター "と "セッター "を提供する。

一方,JavaBeansは,より簡単なイントロスペクションと再利用性を可能にする特殊化POJOであり,特定の規則に従うことを要求する。 これらの規則は,JavaBeansが,IDEにおけるUIウィジェットのように,コンポーネント間で標準化された共有可能なマシン可読状態であるように初期設計されたので,必要である。1POJOとJavaBeansの違いを表4-1にリストする。

表4-1. POJOとJavaBeansの比較
ポジョ ジャバビーン

一般化制限

Java言語規則によって強制される。

JavaBean API仕様によって強制される。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

学習アルゴリズム

学習アルゴリズム

George Heineman
エンジニアが学ぶ会計システムの「知識」と「技術」

エンジニアが学ぶ会計システムの「知識」と「技術」

広川 敬祐, 五島 伸二, 小田 恭彦, 大塚 晃, 川勝 健司

Publisher Resources

ISBN: 9798341625730