「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

Juliaを基礎からゆっくりと(その02/X)

 \mathrm{R}\mathrm{Python}\mathrm{C}言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としての\mathrm{Julia}を学んでいく。

2. Juliaの言語機能

2.3 制御構文

2.3.1 条件評価

 \mathrm{Julia}では\mathrm{if,\ elseif,\ else\ end}というキーワードを用いて条件評価のブロックを構成する。また三項演算子で記述することができる。簡易な条件評価であれば1行で簡潔に記述できるのがメリットである。

x = 3; y = 2

# シンプルな書き方
if x < y
    println("x = $(x) is less than y = $(y).")
elseif x > y
    println("x = $(x) is larger than y = $(y).")
else
    println("x = $(x) is equal to y = $(y).")
end

# 別の書き方:三項演算子
x = 100

x > 100 ? true : false # a ? b : cはaの評価結果がtrueであればbを、falseであればcを返す
2.3.2 短絡評価

 短絡評価は\&\&||という演算子を用いた条件評価を指す。コードが簡潔になるために\mathrm{Julia}の標準ライブラリ内で頻繁に用いられている。

n = -100

n < 0 && error("n must be positive.") # a && b => aである場合にbを返す
n >= 0 || error("n must be non-negative.") # a || b =>aでない場合にbを返す
2.3.3 ループ

 \mathrm{while}文を用いると、指定した条件を満たす間に\mathrm{while}から\mathrm{end}までを繰り返す。

i = 1

# Juliaではブロック内で宣言した変数はローカル変数になる
while i <= 5
    println(i)
    global i += 1 # while文の外(条件文で扱うためにglobal変数とする)
end
2.3.4 try/catch/finally

 \mathrm{try}/\mathrm{catch}/\mathrm{finally}はプログラムの例外処理を行うための構文である。テストしたいコードを\mathrm{try}ブロックとして指定し、\mathrm{try}ブロックの処理中に例外が発生したら、処理を中断して\mathrm{catch}ブロックの処理が始まる。\mathrm{try}\mathrm{catch}の処理が終了すると、\mathrm{finally}の処理が行われる。\mathrm{try}\mathrm{finally}は必須ではないため、\mathrm{try}/\mathrm{catch}\mathrm{try}/\mathrm{finally}も許容される。

str = 'あ'

try
    i = parse(Int,str)
catch
    println("例外処理を行いました。")
end

2.3 関数

#####################
### Juliaでの関数 ###
#####################

### 関数の3つの基本的な書き方
## Juliaでは関数を以下のように宣言する:
function add(x,y)
    return x + y
end

## ただしreturnで戻り値を宣言しなくとも最後に計算した値が自動的に返り値になる
function add2(x,y)
    x + y
end

## さらに簡単な関数であれば1行で書ける
add3(x, y) = x + y

#
println(add(1,3))
println(add2(1,3))
println(add3(1,3))
println("############################")


### 関数での型指定
## 引数および返り値の型を指定できる
add_typed(x::Int, y::Int) = x + y
add_typed2(x::Int, y::Int)::Float64 = x + y
add_typed3(x::Float64, y::Float64)::Int = x + y

# 
println(add_typed(1,3))
try
    println(add_typed(1.0,3.2))
catch
    println("error")
end
println(add_typed2(1,3))
try
    println(add_typed3(1.0,3.0))
catch
    println("error")
end

# 暗黙的な型変換が出来ないとエラーになる
try
    println(add_typed3(1.0,3.2))
catch
    println("error")
end


### 戻り値を複数にする
sum_diff(x, y) = (x + y, x- y)

println(sum_diff(3,1))
プライバシーポリシー お問い合わせ