Juliaで学ぶプログラミング入門 関数 その１

# 関数
関数とは、一連の処理をまとめたものです。プログラム中で、同じような処理を繰り返し実行する場合、その処理を関数としてまとめることで、プログラムを効率よく記述することができます。

例えば、次のようなコードでは、「1から100までの整数の合計値」を計算するプログラムがあります。
```julia
# 1から100までの整数の合計値を計算する
total = 0
for i in 1:100
    total = total + i
end
println(total)

```
このコードを実行すると、次のような出力が得られます。
```julia
5050
```
このように、1から100までの整数の合計値を計算することができました。しかし、このプログラムは、1から100までの整数の合計値を計算することはできますが、1から1000までの整数の合計値を計算したい、といった場合には使用できません。

では、１から100の整数の合計と、１から1000までの整数の合計の２つを算出したいときにはどうすればよいのでしょうか。
２つの方法があります。
1. 別々に処理を作る
1. 条件をかえても同じ処理で済ませるようにする。

この２番めのやりかたが関数です。

プログラム中で同じような処理を繰り返し実行する場合、その処理をまとめて関数として定義することができます。例えば、次のようなコードでは、「1からNまでの整数の合計値」を計算する関数を定義しています。



```julia
# 1からNまでの整数の合計値を計算する関数
function sum_from_1_to_N(N)
    total = 0
    for i in 1:N
        total = total + i
    end
    return total
end

# 関数を使用する
println(sum_from_1_to_N(100))
println(sum_from_1_to_N(1000))


```
このコードを実行すると、次のような出力が得られます。

```julia
5050
500500

```

このように予め汎用性のあるように定義することで条件を変えて利用することができます。

ちなみに関数は処理群をまとめるという機能もあります。
上記の処理は「sum_from_1_to_N(100)」という１行で複数の処理をまとめています。
同じ処理をする場合、まとめることでプログラムの可読性（＝読みやすさ）が高まります。

可読性を高めるためには関数名で処理がわかるようにするなどの工夫を行います。

## 関数の種類
関数には予め組み込まれている「組み込み関数」とユーザーがプログラム中に定義する「ユーザー定義関数」があります。

### 組み込み関数
Juliaには、標準で多くの組み込み関数が用意されています。これらの組み込み関数は、Juliaでプログラムを書く上で、非常に便利な機能を提供します。

例えば、Juliaでは、次のような組み込み関数が用意されています。

- length: 配列や文字列などのデータの長さを求める関数
- push!: 配列やタプルなどのデータの末尾に要素を追加する関数
- sort: 配列やタプルなどのデータをソートする関数
- sqrt: 数値の平方根を求める関数

たとえば、length関数を使用することで、配列や文字列の長さを求めることができます。また、push!関数を使用することで、配列やタプルの末尾に新しい要素を追加することができます。

なお、関数名の後ろに!をつけることがあります。これは、Juliaでは、!をつけた関数は、引数として渡されたデータを更新する関数であることを示すための記法です。例えば、上記の例で言うと、push!関数は、引数として渡された配列やタプルを更新する関数です。


### ユーザー定義関数
ユーザーが関数を定義することもできます。これをユーザー定義関数と呼びます。標準の組み込み関数以外に、独自に定義した関数を使用することができます。

例えば以下はユーザー定義関数を設定しています。

```julia
# ユーザー定義関数
function square(x)
    return x * x
end

# ユーザー定義関数を使用する
println(square(2))
println(square(3))


```
このコードを実行すると、次のような出力が得られます。

```julia
4
9

```
このように、Juliaでは、ユーザー定義関数を定義することができます。ユーザー定義関数を定義する場合、functionキーワードを使用し、関数名と引数を指定します。次に、関数本体を記述します。この関数本体は、複数行にわたることができます。最後に、returnキーワードを使用して、関数の計算結果を返すようにします。最後にendで定義を終わらせます。

この関数を定義することで、以降、プログラムで、この関数を使用することができます。


## 参考図書
[１から始めるプログラミング](https://amzn.to/3HHR7Yv)
<a href="https://www.amazon.co.jp/1%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%80%B2%E8%97%A4-%E8%A3%95%E4%B9%8B/dp/433902905X?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-1&linkCode=li3&tag=buzz06-22&linkId=8f7deba521f52f812d35ecdbe756cc10&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=433902905X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=433902905X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[Juliaプログラミングクックブック](https://amzn.to/3PFfb0a)
<a href="https://www.amazon.co.jp/Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E2%80%95%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%80%81%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%80%81%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%BE%E3%81%A7-Bogumi%C5%82-Kami%C5%84ski/dp/4873118891?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-2&linkCode=li3&tag=buzz06-22&linkId=4e34b4b620932164412ec18acff914a8&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118891&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4873118891" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[天才プログラマー タンメイが教える Julia超入門](https://amzn.to/3FJRpeW)
<a href="https://www.amazon.co.jp/%E5%A4%A9%E6%89%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E3%82%BF%E3%83%B3%E3%83%A1%E3%82%A4%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Julia%E8%B6%85%E5%85%A5%E9%96%80-Tanmay-Bakshi/dp/4807920219?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-10&linkCode=li3&tag=buzz06-22&linkId=bf79aa67b5c5956c8fd26f9436401dc6&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4807920219&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4807920219" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />