質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

Q&A

1回答

1913閲覧

juliaにクラスがない理由

退会済みユーザー

退会済みユーザー

総合スコア0

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

0グッド

0クリップ

投稿2022/05/25 12:22

プログラミング言語juliaにクラスが無い理由を知りたいです。

ちなみに、なぜこのようなことが気になったかというと、クラスを使わなくても、クラスを用いたオブジェクト指向プログラミング並に保守性を保てるのかという疑問があったからです。

保てるのだとしたらどのように扱えば良いのかも気になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/25 12:28

https://teratail.com/questions/39mlwrgul3kg1p オブジェクト指向についても詳しくないようですが、それであればまずそちらから学ぶのが理解の近道になります。 でなければ話が通じないでしょう。
guest

回答1

0

Juliaにクラスが無い理由というのはあくまで個人の意見ですが,数値演算を高速に簡単に処理することが主目的に設計された言語だからだと思います。
ということは処理速度,メモリ効率を重視しているということで,その方向性とクラスは合わないと判断されたためでしょう。

クラスがあってオブジェクトを作成するとなると,愚直に実装するとすればたとえ使わないメソッドであってもオブジェクトを作成した数だけメモリにロードされる訳です。

実際にこんな実装になっていることはないと思いますが,同じクラスのオブジェクトを作成した時の例を次に示します。
それぞれのオブジェクトに対してメソッドがロードされます。

OO

一方,Juliaの場合はクラスがないので,複合型(構造体)とそれを扱う二つの関数のモジュールをロードし三つのオブジェクトを作成したとします。

Non OO

明らかにクラスの方がメソッドの分だけメモリを余分に食います。特に機能リッチなクラスに対してはこの差が顕著に表れることになると思います。
もちろん,実装方法によって改善されますが,それよりも開発陣はクラスを実装しないことを選択したということだろうと思います。
少し前まで処理速度アップのため廃止される関数や文法とかも多かったので,「速度ファースト」なのは間違いないと思います。

ただ,クラスが無いというのはGoやRustでも同じなので,Juliaが特別ということでもないかと思います。
Juliaの場合は多重ディスパッチという機能により同じ関数名でも引数の型によって別の関数として区別することができるので,オブジェクト指向っぽいことは可能です。

julia

1# hoge.jl 2 3struct 正方形 4 一辺::Float64 5end 6 7struct 長方形 81::Float64 92::Float64 10end 11 12struct13 半径::Float64 14end 15 16function 面積(gr::正方形) 17 gr.一辺^2 18end 19 20function 面積(gr::長方形) 21 gr.1 * gr.2 22end 23 24function 面積(gr::) 25 pi * gr.半径^2 26end 27 28 29function 外周(gr::正方形) 30 gr.一辺 * 4 31end 32 33function 外周(gr::長方形) 34 (gr.1 + gr.2) * 2 35end 36 37function 外周(gr::) 38 2pi * gr.半径 39end 40

のような感じで実装し,

julia

1julia> include("hoge.jl") 2外周 (generic function with 3 methods) 3 4julia> rect=長方形(3, 4) 5長方形(3.0, 4.0) 6 7julia> 外周(rect) 814.0 9 10julia> 面積(rect) 1112.0 12 13julia> c=(5) 14(5.0) 15 16julia> 外周(c) 1731.41592653589793 18 19julia> 面積(c) 2078.53981633974483 21 22

のようなこともできる,ということです。

投稿2022/06/13 13:51

ujimushi_sradjp

総合スコア2091

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問