・Python初心者の方
・ダックタイピングという言葉を知らない方
・ダックタイピングの書き方について調べている方
どうもこんにちは。
コンです。
今更ですが私は工場のプログラマーとして働いているのと同時に総合職としても働いております。
(むしろ総合職の仕事がメイン)
仕事の内容も総合職らしく?問題定義とその解決することが第一優先になっております。
そうするとスピードを追求するあまり、問題は解決できるけど汚ないソースコードのソフトウェアを量産。
みたいに、なってしまっております。
そんな事を続けていてはいけないと考え、最近はUdemyでPythonを基本から勉強し直してます。
そんな中、ダックタイピングというコーディングスタイルを勉強する機会があったので
このブログでも紹介させていただきます。
ダックタイピングとは
まず「ダックタイピング」の由来は、
「アヒルのように歩き、アヒルのように鳴くものは、アヒルである」
という言葉から来ています。
つまり、アヒルであることを判定するために、アヒルであるかどうかを問いただすのではなく、その動きや鳴き声を観察し、アヒルであることを判断することができるということです。
これをオブジェクト指向のプログラミングで考えると
「プログラミングにおいて、オブジェクトの型よりもそのオブジェクトが持つメソッドやプロパティを重視する」スタイルのことを指します。
Pythonのコードの例
class Duck:
def quack(self):
print("Quack, quack!")
def swim(self):
print("Swimming...")
class RobotDuck:
def quack(self):
print("Beep, beep!")
def swim(self):
print("Thrusters engaged. Swimming...")
def make_it_quack_and_swim(duck):
duck.quack()
duck.swim()
# Duckオブジェクトを渡す場合
duck = Duck()
make_it_quack_and_swim(duck)
# RobotDuckオブジェクトを渡す場合
robot_duck = RobotDuck()
make_it_quack_and_swim(robot_duck)
この例では、まず「Duck」と「RobotDuck」という2つのクラスが定義されています。
それぞれ、quack()メソッドとswim()メソッドを持っています。
次に、make_it_quack_and_swim()という関数が定義されています。この関数は、Duck型のオブジェクトを引数として受け取り、そのオブジェクトが持つquack()メソッドとswim()メソッドを呼び出します。
そして、最後に、Duck型のオブジェクトとRobotDuck型のオブジェクトをそれぞれ生成し、make_it_quack_and_swim()関数に渡しています。
ここで、ダックタイピングの特徴を生かしています。Duck型のオブジェクトとRobotDuck型のオブジェクトは、共にquack()メソッドとswim()メソッドを持っているため、make_it_quack_and_swim()関数に渡すことができます。
メリットとデメリット
メリット
プログラムの柔軟性を高めることができるとされています。
例えば、ある関数が、ある型のオブジェクトを引数として受け取る場合、ダックタイピングを採用すると、その関数は、その型のオブジェクトだけでなく、同じメソッドやプロパティを持つ別の型のオブジェクトも引数として受け取ることができます。(「Duck」と「RobotDuck」で示した上の例にあたります)
このように、オブジェクトの型に依存せずにプログラムを設計することで、柔軟性や再利用性が高まることがあります。
またコードが簡潔になります。
特定のクラスに依存する必要がなく、同じインターフェースを持つオブジェクトを渡すだけでよくなるため、コードの行数が
デメリット
ダックタイピングは、オブジェクトが持つメソッドや属性が重要になります。
つまり、オブジェクトの型が重要ではなく、オブジェクトが期待されるインターフェースを持つことが重要です。
このため、ダックタイピングを使用する場合、ドキュメントの重要性が高まります。オブジェクトが期待されるインターフェースを明確に文書化することが重要であり、コードの意図を明確に伝える必要があります。
おわりに
ここまで読んでいただき、ありがとうございました。
今回はコーディングのスタイルの1つとしてダックタイピングについて
説明させていただきました。
このようにコーディングスタイルを意識すると、
そのスタイルにどういうメリットとデメリットがあるのかが、一般的に説明できるようになるため
書く時の注意点するポイントが分かりやすくなりますね。
これからも勉強していきたいと思いました。
もしこの記事を読んでいる方で、クラスとかよく分からないという方もいると思うので
そんな方は下記の記事を参考にしていただければ幸いです。
ダックタイピングについては
「シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全」という本でも
しっかり解説してあるのでオススメです。
重ね重ねではありますが、ここまで読んでいただきありがとうございました。