Juliaで学ぶプログラミング入門 変数

# 変数

## 数学の変数とプログラムの変数の違い
数学の変数とプログラミングの変数は、それぞれ異なる意味を持ちます。

数学の変数とは、数式や方程式などで扱う符号のことです。数学の変数は、値を代入することで、その数式や方程式を特定の値に解き、計算することができます。

一方、プログラミングの変数は、プログラム内で値を保存するための仮想的な記憶領域のことです。プログラミングの変数は、データを格納することで、プログラム内でそのデータを扱うことができます。

数学の変数とプログラミングの変数は、それぞれ異なる意味を持っており、使い方も異なりますが、両者は、値を扱うためのものであるといえます。

## Juliaの変数
juliaでは、変数を使用することで、データ等をプログラム内で保存し、操作することができます。

juliaで変数を使用するには、次のようにします。

```julia
# 変数my_variableを定義する
my_variable = 1

# 変数を使用する
println(my_variable)

# 変数の値を更新する
my_variable = 2

# 変数の値が更新されていることを確認する
println(my_variable)
```

上記の例では、変数my_variableを定義し、初期値として1を代入しています。次に、変数を使用することで、変数my_variableの値を表示することができます。その後、変数my_variableの値を更新し、2を代入します。最後に、変数my_variableの値が更新されたことを確認するために、println関数を使用して表示します。

このようにして、juliaで変数を使用することができます。また、juliaでは、型定義を使用することで、変数の型を明示的に宣言することができます。型定義を使用することで、プログラムの信頼性や実行速度が向上することがあります。



## ans (対話モード時)
juliaでは、ansという特別な変数が用意されています。ans変数は、最後に計算された結果が保存される特殊な変数です。

juliaの対話モードで、次のように実行すると、ans変数が使用されます。

```julia
julia> 1 + 2
3

julia> ans * 3
9
```

上記の例では、1 + 2を計算し、結果が3になります。次に、ans * 3を計算し、結果が9になります。このように、juliaの対話モードでは、ans変数が自動的に作成され、最後に計算された結果が格納されます。

ans変数は、対話モードでのみ使用することができます。通常のプログラム内では、ans変数を使用することはできません。

また、ans変数は、自動的に作成されるものであるため、明示的に宣言する必要はありません。ans変数を使用するには、単にansという名前で使用するだけです。

このように、juliaでは、ans変数を使用して、最後に計算された結果を保存することができます。

## 変数名
変数名は以下が条件となります。
- 変数名は大文字と小文字が区別されます
- 名前に基づいて変数を異なる方法で処理されません。
- Unicode 名 (UTF-8 エンコーディング) が可能です。


以下はJuliaにおける変数名の推奨です。（守らなくてもエラーにはなりませんが混乱を招かないために推奨します）
- 変数名は小文字です。
- 単語の区切りはアンダースコア ( '_') で示すことができますが、名前が読みにくい場合を除き、アンダースコアの使用は推奨されません。

(※注意：とjuliaのドキュメントにかかれていますが、本入門では説明しやすいのでアンダースコアは多様します。
まずは、変数が表す内容を示すように適切に命名しましょう。例えば、変数が指定された年の日数を表す場合、変数名を days_in_yearとしたほうがわかりやすいです。あとから他人でも内容が推定できる命名を心がけましょう）

### unicode(Utf-8)の変数
juliaでは、unicode文字列を使用した変数名を定義することができます。unicode文字列を使用した変数名を定義することで、様々な言語や文字を表現することができます。

juliaでunicode文字列を使用した変数名を定義するには、次のようにします。

```julia
# 変数名にunicode文字列を使用する
変数 = 1

# 変数を使用する
println(変数)　
```

## 定数への代入
自由度が高い変数ですが。予め予約された定数があるので注意が必要です。

```julia
println(pi)

# 3.1415926535897...

pi=92

#エラー
# cannot assign a value to variable MathConstants.pi from module Main

```
利用するまえに代入すると予約定数のつもりでも代入値になるので注意が必要です。
```julia
# これ以前にpiを利用していない前提で実行
pi=100
println(pi)  # 100
```


## 型宣言（型注釈）
juliaでは、変数の型を明示的に宣言することができます。変数の型を宣言することを「型宣言」または「型注釈」と言います。

型宣言を行うことで、プログラムの信頼性や実行速度が向上することがあります。また、型宣言を行うことで、プログラムのバグが発生しにくくなることがあります。

juliaで変数の型を指定するには、次のようにします。
```julia
# 変数xを定義する
x::Int32 = 1

# 変数yを定羙する
y::Float64 = 1.0

# 変数zを定義する
z::Bool = true
```
上記の例では、変数xをInt32型として定義しています。Int32型とは、32ビット整数型を表します。次に、変数yをFloat64型として定義しています。Float64型とは、64ビット浮動小数点型を表します。最後に、変数zをBool型として定義しています。Bool型とは、真偽値を表す型です。


## 文字列に変数を埋め込む
一般にフォーマット文字列などと言われているものです。

```julia
julia> s="hello,"
"hello,"

julia> "$s ,Mr.Lawrence"
"hello,Mr.Lawrence"
```
上の例では変数sにhello,を代入しその上で ,Mr.Lawrenceの直前の文字列の中に入れました。

## 参考図書
[１から始めるプログラミング](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;" />