Julia早引きノート［10］関数 (2)応用編

###関数 (2)応用編(書き方例)

```ruby:note10
◆型指定
　# 引数はInt型(整数)を指定、返り値はFloat64(実数)を指定
　function comsumption_tax(price::Int)::Float64
　    tax_rate = 1.08
　    return tax_rate * price
　end

◆型指定(一行表示)
　comsumption_tax(price::Int)::Float64 = tax_rate * price


◆可変長引数
　■例文1
　　function summation(v...)
　　    total = 0
　　    for i in v
　　        total += v[i]
　　    end
　　    return total
　　end

　■例文2
　　function summation2(v::Int...)
　　    total = 0
　　    for i = 1:length(v)
　　        total += v[i]
　　    end
　　    return total
　　end


◆オプショナル引数
　# 引数の初期値を予め設定(下例：v2の初期値を100に設定)
　function foptional(v1, v2=100)
　    total = v1 + v2
　    return total
　end


◆キーワード引数
　# 区切り文字に;(セミコロン)を使用(詳細は下部の解説を参照)
　function car(length, width; color="white", price=10000)
　    println("special car:")
　    println(" lenth x width = ", length, " x ", width)
　    println(" color = ", color)
　    println(" price = ", price)
　end


◆匿名関数
　■例文1
　　# 引数は1つのみ指定可
　　price = x -> x * 1.08

　■例文2
　　# 複数行の場合は、begin～endで囲う
　　nebiki = x -> begin
　　    price = x * 0.9
　　    return price * 1.08
　　end

```


##解説

####(1)型指定
型の指定は必須ではありませんが、指定することも可能です。
引数だけの型指定でも構いませんし、返り値だけの型指定でも構いません。
型が一致しない関数を呼び出すとエラーが発生します。

####(2)可変長引数
**◆要約**
　①引数の数を変えて使用することができます。
　②設定できる引数は、最後の引数だけです。
　③2つ以上の引数を可変長にすることもできません。
　④可変長引数に型指定設定できます。

**①引数の数を変えて使用することができます。**
下図の例では、引数が1つ、2つ、3つの場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/fe4e5868-7c54-2260-0472-776d388f4e53.png)
引数に設定する値はリスト(実際にはタプル)として取り出しますので、以下のようにループ部分を書くこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/4b61e8ea-8f03-5514-1d62-2779e4f2a6c5.png)
**②設定できる引数は、最後の引数だけです。**
以下のような書き方はできません。

```ruby:note10
function summation(v..., x)
    ...
```

**③2つ以上の引数を可変長にすることもできません。**
**④可変長引数に型指定設定できます。**
可変長引数に型指定をする場合は、以下のように設定します。

```ruby:note10
function summation(v::Int...)
    ...
```

####(3)オプショナル引数

**◆要約**
　①引数の初期値を予め設定しておくことができます。
　②複数の引数をオプショナルに指定することができます。
　③オプショナル引数は引数の末尾にまとめて書きます。

**①引数の初期値を予め設定しておくことができます。**
引数の値が省略された場合はこの初期値が適用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/17974eff-72ba-ba6a-180e-bdaa1c3a2dd7.png)
**②複数の引数をオプショナルに指定することができます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d2d3b59c-177d-f0c9-00a8-da3087b46b9e.png)
**③オプショナル引数は引数の末尾にまとめて書きます。**
以下のような書き方はできません。

```ruby:note10
function foptional(v2=10, v1)
    ...
```

####(4)キーワード引数

**複数の引数のうち、特定の引数の値を特に設定したい場合に使用します。**
以下の例では初めの2つの引数は通常の引数で、さらに、複数ある引数のうちpriceの値を設定した例です。
通常の引数とキーワード引数の区切りに **;** (セミコロン)を使用する点に注意して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/052051ac-fee8-37ef-c38e-0c2f8d1a6755.png)

####(5)匿名関数

アロー関数によく似た関数です。
**◆要約**
　①引数は一つのみ指定できます。
　②複数行の処理を定義する場合は、begin～endで囲みます。

**①引数は一つのみ指定できます。**
引数を複数設定することはできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/642e6013-1305-3a5f-bbe6-39e0957346b4.png)
**②複数行の処理を定義する場合は、begin～endで囲みます。**
以下の例では2行の処理を行っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/952911d6-e537-58e8-3500-2774e712a728.png)


##もくじ
[Julia早引きノート［01］変数・定数の使い方](https://qiita.com/ttabata/items/a1ada2c0cba03672e105)
[Julia早引きノート［02］算術式、演算子](https://qiita.com/ttabata/items/90900d0914fa317f652d)
[Julia早引きノート［03］複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
[Julia早引きノート［04］正規表現](https://qiita.com/ttabata/items/8b6e4a2b7c2ca299de03)
....
<details><summary>もくじを開く</summary><div>
[Julia早引きノート［05］if文]
(https://qiita.com/ttabata/items/4f0bcff1e32f60402dfb)
[Julia早引きノート［06］ループ処理]
(https://qiita.com/ttabata/items/2a53825101b0b75fb589)
[Julia早引きノート［07］try, catch, finally]
(https://qiita.com/ttabata/items/1d6fe990526c99b65b5f)
[Julia早引きノート［08］変数の型(Int, Float, Bool, Char, String)]
(https://qiita.com/ttabata/items/2b84a826e39bfe432b62)
[Julia早引きノート［09］関数 (1)基本編]
(https://qiita.com/ttabata/items/d9b4f2728ec0dbcc6394)
[Julia早引きノート［10］関数 (2)応用編]
(https://qiita.com/ttabata/items/462e216c43d519f1969d)
[Julia早引きノート［11］Nothing型]
(https://qiita.com/ttabata/items/0e5a6b21968d8752cf0b)
[Julia早引きノート［12］複合型(Composite Type)型]
(https://qiita.com/ttabata/items/27469216a3c33101c825)
[Julia早引きノート［13］タプル]
(https://qiita.com/ttabata/items/ebe35dbfec4efbc1c29a)
[Julia早引きノート［14］リスト(Array型一次元配列)]
(https://qiita.com/ttabata/items/7528863ccbb282e8260d)
[Julia早引きノート［15］辞書(dictionary)]
(https://qiita.com/ttabata/items/77a4f1d02b51d067bfb7)
[Julia早引きノート［16］集合]
(https://qiita.com/ttabata/items/ca8137922a785122037e)
[Julia早引きノート［17］多次元配列 (1)初期化]
(https://qiita.com/ttabata/items/01fecbd14363460a27a6)
[Julia早引きノート［18］多次元配列 (2)様々な演算や関数]
(https://qiita.com/ttabata/items/f35896a5fa005fba7fbc)
[Julia早引きノート［19］多次元配列 (3)サブ配列]
(https://qiita.com/ttabata/items/045c00406fe45270b42e)
[Julia早引きノート［20］ファイル入出力]
(https://qiita.com/ttabata/items/5a99c3998060d161ace8)
[Julia早引きノート［21］JSON、XMLファイルの入出力]
(https://qiita.com/ttabata/items/65ebec11830271f9be71)
[Julia早引きノート［22］Python関数やPythonモジュールの呼び出し]
(https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17)
[Julia早引きノート［23］JuliaでのMatplotlibによるグラフ描画]
(https://qiita.com/ttabata/items/96a0e172addfac690cca)
[Julia早引きノート［24］CSVFiles(DataFrameとの連携)]
(https://qiita.com/ttabata/items/51446731a703b5aca524)
[Julia早引きノート［25］線形代数演算(ベクトル・行列計算)]
(https://qiita.com/ttabata/items/5abe14d5c510e8ca0f54)
(※引き続きコンテンツを増やしていきます)
</div></details>


##関連情報

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/


##ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。