if (売上.勘定科目 == 勘定科目.現金) { // 計算するロジック } else if (売上.勘定科目 == 勘定科目.売掛金) { // 計算するロジック } else if (売上.勘定科目 == 勘定科目.有価証券) { // 計算するロジック } このようなコードはしばしばスパゲッティになりがちですし、 項目が増えるたびに、条件分岐を増やさないといけないので保守も大変です。 売上の課目ごとに計算方法が違いますが金額計算するという振る舞いは同じです。 このコードからif文を駆逐するにはどうしたらいいでしょうか? 型やフラグ、enumによる条件分岐はたいていの場合、ポリモーフィズムによって消し去ることができます。 ポリモーフィズムとは異なる型のオブジェクトを同一視し、そのオブジェクトの型によって動作を切り替えることです。 ポリモーフィズムは動的型付け言語ではダックタイピング、
![ポリモーフィズムを活用するとなぜ if や switch が消えるのか? - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/7dd4d19437bb78b404852550e446e3a390352d28/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgzJTlEJUUzJTgzJUFBJUUzJTgzJUEyJUUzJTgzJUJDJUUzJTgzJTk1JUUzJTgyJUEzJUUzJTgyJUJBJUUzJTgzJUEwJUUzJTgyJTkyJUU2JUI0JUJCJUU3JTk0JUE4JUUzJTgxJTk5JUUzJTgyJThCJUUzJTgxJUE4JUUzJTgxJUFBJUUzJTgxJTlDJTIwaWYlMjAlRTMlODIlODQlMjBzd2l0Y2glMjAlMjAlRTMlODElOEMlRTYlQjYlODglRTMlODElODglRTMlODIlOEIlRTMlODElQUUlRTMlODElOEIlRUYlQkMlOUYmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTFjNDliOTFhOWM0ZjhmZjA1OTlhY2IxZGNhYjdlZjg2%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBOb3NzYSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9OTk3NTBiNTJhNzEyZTcxODU4ODQxODQ4OWI0ZThkYTY%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D8afbbcce270aeb452893f48b86518a01)