Rubyでオーバーロードはできる?

Rubyとは?

まず初めにRubyについて簡単に説明させていただきます。
Rubyとは日本人(まつもとゆきひろ氏)が開発したことでも有名ですが、ここまで支持されているのには他にも沢山の理由があります。それは言語の柔軟性と分かりやすさです。
現在、世界で最も普及している言語は恐らくJavaでしょう。

ただJavaとは大きな違いがあります。それはRubyが「オブジェクト指向スクリプト言語」だということです。一方Javaは「コンパイラ言語」と呼ばれています。JavaやC言語などのコンパイラ言語はコンパイル(人が書いたコードを機械の命令に変換)して初めてプログラムを実行できます。一方、Rubyのようなオブジェクト指向スクリプト言語はコンパイルが一切必要なく、そのまま実行できるのでコンパイラ言語よりも簡単にプログラミングを行えます。

オブジェクト指向とは

オブジェクト指向とはソフトウェアの開発をより簡単に効率よく行うために生み出された概念で、「モノの作成を操作として見る考え方」です。「ボタンを押せばゲームが起動されて、スタートを押せばゲームが始まる。」この最中に中でどんなプログラムが作動しているのか知る必要はないですよね。「モノを作る。そしてそのモノを使う。」これがオブジェクト指向です。

オブジェクト指向の特徴

オブジェクト指向には大きく3つの特徴があります。

1.カプセル化

カプセル化とは決まった方法以外での外部からのアクセスを制限することです。少し暗号化と似ていますが、これは書き換えてはいけないデータやプログラムを間違って書き換えてしまわないように作られた機能です。

2.継承

継承とは、すでにあるデータやプログラムを受け継いで再利用し、新たなデータやプログラムを追加できる機能です。もう完成しているプログラムに新しく機能を追加させるために、わざわざ1から作り直すのは非効率的であるため、この機能は非常に重要です。

多態性

多態性とはポリモーフィズムとも呼ばれ、同じ名前のプログラムを作成することが可能で、それらが個別に独立して存在できる機能です。多態性の概念がない言語では、同名のプログラムが二重に定義されていますとエラーが出てきます。ですが、多態性の概念を持つ言語ではそれぞれ別々に表示することが可能です。

以上がオブジェクト指向の特徴です。

オーバーロードとは

ここまではRubyやオブジェクト指向について触れてきましたが、「オーバーロード」というものはご存じでしょうか。

オーバーロードとは、同じ名称のメソッドで引数の型、個数などを変えられるオブジェクト指向プログラミングのテクニックのことです。似た名前でオーバーライドというテクニックが存在しますがオーバーロードとは別物なので間違えないように気を付けましょう。

先ほどオーバーロードは同じ名称のメソッドで引数の型、個数が変えられると書きましたが、引数の型と個数が全て一緒では使えません。すべてが一緒だとプログラムが区別できなくなるからです。なのでオーバーロードする際は必ず引数の型と個数と並び順を全て変えて定義しなければなりません。

このオーバーロードというテクニックが使われている理由は、使用する人が名前の違うメソッドを複数覚える必要がないからです。単純にメソッドや引数は多いより少ない方がより分かりやすくなりますよね。オーバーロードはJavaなどでも使えるので知っておくと必ず役に立ちます。

さて、ここからは本題の「Rubyでオーバーロードはできるのか」について詳しく説明させていただきます。

Rubyでオーバーロードはできるのか

Rubyでオーバーロードはできるのかについてですが、率直に言うとオーバーロードはできません。
先ほどまでRubyは柔軟で分かりやすく自由度の高いものであると書いていたのにできないのか。と思うかもしれませんが、その理由はRubyには引数の型判定が存在しないからです。そもそもスクリプト言語なのでその概念が存在しないようです。自由度が高いが故にデータ型に捕らわれずに処理を行える半面、こうしたデメリットもやはりあります。それではプログラミングするのには不向きでは。と思う方もいるかもしれませんが違います。

Rubyはモジュール(拡張機能)をインストールするだけで、それにも対応できるようになるのです。自分の使いたいクラスにOverloaderというモジュールを追加しメソッドで呼び出すことでオーバーロードが可能になります。こういった機能を追加できるのもスクリプト言語の良いところです。例えば英語の表記を日本語にすることもできます。こういった拡張機能は開発者たちだけでなくユーザーが構築することも可能です。一見、難しく堅く見えがちなプログラムもユーザーや開発側のアイディアで日々改良、更新されていっていることが分かりますね。

まとめ

今回はRubyに着目しましたが他にもスクリプト言語は存在しているので、興味が沸いた方はぜひ調べてみてほしいです。このオーバーロードを追加する機能はRubyが普及してからここ数年で追加されたもののようです。「誰かの手助けをしたい」「こんな機能があったら」などのアイディアを持っている人がこのような目に見えないモノでユーザーを支えていることが分かりました。この記事で深く言語について勉強し、多くの人に喜ばれる機能やシステムを生み出すきっかけとなれば幸いです。

コメントを残す

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

前の記事

Rubyの概要と強み

次の記事

ITパスポートとは