バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、Scilabの場合のユーザ関数作成方法について実施。
MATLABと似ていると思いきや、全く異なる仕組みっぽい。
スクリプトに記載したとしても、明示的にワークスペースに関数を展開する必要がある。
今回はJuliaについて。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
Juliaの場合
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
毎度言ってる気がするが、Juliaについては素人なんで。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
Juliaの話になるたびに言ってるね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
というわけで、抜け漏れはあるという前提で一応調べてきた。
イメージ的にはPythonに近いと思ってよいかもしれない。
こんな感じでやればOKだろう。
対話モードで関数定義
> function test_func(a,b,c)
x=a+b
y=a-c
return x, y
end
test_func (generic function with 1 method)
> (A,B)=test_func(1,2,3)
(3, -2)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
funcionで初めてendで終了だな。
Pythonと違ってインデントは気にしなくてOKだ。
まぁ見やすさの都合で入れるべきではあるけどね。
あと、明示的にreturn分を使わない場合は、最後に更新した変数が戻り値になるな。今回のように2変数を戻したい場合は、明示的にreturn文を使うことになるだろう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
これまた特殊な仕様が・・・。
※ 必ずreturnが必要ということもなく、関数の最後に変数を置くことでタプルとして戻せる。
> function test_func(a,b,c)
x=a+b
y=a-c
x, y
end
test_func (generic function with 1 method)
> (A,B)=test_func(1,2,3)
(3, -2)
別ファイルで関数定義
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
別ファイルで先ほどの関数を記載し、
# a,b,cが引数
# x,yが戻り値
function test_func(a,b,c)
x=a+b
y=a-c
return x, y
end
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これをtest.jlというファイルとしよう。
このを利用するにはincludeを使用する。
> include("test.jl")
test_func (generic function with 1 method)
> (A,B)=test_func(1,2,3)
(3, -2)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
これはなんかC言語っぽい。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁ似たような動きはするな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
あと、Juliaの場合、moduleを使用するパターンもあるのだが、
これはMATLABやPythonのclassに相当する。
classについては、本シリーズでは触れてないので、Juliaでもここでは省略しておこう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- Juliaの場合の場合のユーザ関数作成方法について実施。
- 基本的にはPythonに似ている。
- 2変数以上を戻す場合は、明示的にreturn文を使用する必要がある。
- 他のファイルで関数を定義している場合はinclude文を使用する。
- C言語のincludeに似ている。
バックナンバーはこちら。
コメント