#author("2019-10-30T17:33:30+09:00","default:Miyashita","Miyashita")
#author("2019-10-30T17:34:03+09:00","default:Miyashita","Miyashita")
*Julia言語 ざっくりメモ [#v6d960a2]
まだわからないことが多い.~
#contents
//Kindle版を買うとサンプルコードも取得できた.
//#htmlinsert(amazon,transitional,"asins=B01MXS4IPT")
//#htmlinsert(amazon,transitional,"asins=B0748MTFVL")


**基本 [#k84361d7]
***起動とか終了とか [#r2d8c3f1]
Ubuntu ではインストール後に terminal で julia と入力すれば始まる.
#codeprettify(lang-bash){{
$ julia
              _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.2 (2017-12-13 18:08 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-pc-linux-gnu

julia> 
}}
"?"を入力すれば上の "julia>" の欄が
#codeprettify(lang-julia){{
 help?>
}}
に自動で変わり,コマンド名を入力すれば説明書きが出力される.~
終了は Ctrl-D か exit() を入力する.

***コメント [#t6706fb0]
#codeprettify(lang-julia){{
# この行はコメントです (1行)
}}
#codeprettify(lang-julia){{
#=
  "#= *** =#"で囲めば
  複数行コメントアウトできる
=#
}}
~

***パッケージの追加など [#nfe56d94]
v0.7.0 未満のバージョンでは,Pkg.add("hoge") でパッケージをインストールする.~
#codeprettify(lang-julia){{
Pkg.add("PyPlot")
}}
確認やアップデートは下記のように実行する.
#codeprettify(lang-julia){{
Pkg.status()
Pkg.update()
}}
v0.7.0 以降は,Pkg を使うときは事前に
#codeprettify(lang-julia){{
using Pkg
}}
をすることが必須になった.v0.7.0 では警告を出してくれるが,v1.0.0 ではこれがないと
#codeprettify(lang-julia){{
julia> Pkg.add("IJulia")
ERROR: UndefVarError: Pkg not defined
}}
となりエラーが出る.~
~
また,v1.0.0 以降では,REPL の先頭で "]" を入力すると Pkg 専用の状態になり,
#codeprettify(lang-julia){{
(v1.0) pkg> add GMT
}}
のようにしても追加ができる.~
~

***図の描き方が多様 [#o96d2c09]
上記のように Pkg.add("Plots") でインストールしたら,
#codeprettify(lang-julia){{
using Plots
}}
でこのパッケージが利用できるようになる.他にも
#codeprettify(lang-julia){{
using Gadfly
using PyPlot
}}
のような可視化ツールが見られる.どれを使ったら良いのかまだよくわからない.~
好みや慣れた言語と親和性が高いものを選びたい.~
のような可視化ツールが見られる.
Plots は Plots 自体に図を描く機能はなく,入力に応じて描画機能を持ったバックエンドが働く.~
バックエンドは
#codeprettify(lang-julia){{
gr() # Plots.gr() に同じ
pyplot()
}}
のようにして切り替えられる.~
複数のパッケージを using して関数名が競合する場合や,パッケージ名を明示したい場合は
#codeprettify(lang-julia){{
using Plots: Plots
Plots.plot() # この場合 plot() は not defined
}}
とする.import Plots でも良いけど,using で統一した方が良いと思う.~
~

***配列の要素は1から [#ha278ea0]
0からではない.Fortran や MATLAB と同じ.ただし,配列を示す括弧は()ではなくて[].~
~
***セミコロン ; の役割 [#s3298561]
これも MATLAB と同じ.式の最後に;をつければ結果が出力されない.
#codeprettify(lang-julia){{
julia> A = 1.
1.0
julia> A = 1.;
}}
ただし,
#codeprettify(lang-julia){{
julia> include("filename.jl");
}}
のように,include でコンソール,REPL で直接実行しない場合は,ファイル内のセミコロンはあってもなくても関係ない.~

1行の中で
#codeprettify(lang-julia){{
julia> A = 1., B = 2.,
ERROR: syntax: invalid assignment location "1"
}}
のようにはできず,
#codeprettify(lang-julia){{
julia> A, B = 1., 2.;
}}
はOK.このへんはPythonと似ている.~

同様のことをMATLAB的にやるとすれば下記の通り.
#codeprettify(lang-julia){{
julia> A = 1.; B = 2.;
}}
これは,; 自体に特別な意味があるわけではなく,単にステートメントの区切りで ; で終われば最後のステートメントが空になる,という意味?~
~

***型の確認 [#ja4a9151]
typeof(A) か isa(A,型の名前) でわかる.
#codeprettify(lang-julia){{
julia> typeof(A)
Float64
julia> isa(A,Int64)
false
julia> isa(A,Float64)
true
julia> A = 1; isa(A,Int64) 
true
}}
~

***変数が定義されているか確認 [#j6b30796]
isdefined は,v0.7.0以降引数が2つ必要になった.~
単に local variable として存在するかどうかは,@isdefined の方が良いらしい.
#codeprettify(lang-julia){{
@isdefined var_name
}}
#codeprettify(lang-julia){{
isdefined(Main, :var_name)
}}

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes