19.0324
いろいろな演算子
ここでは、演算子を、カテゴリーごとに分類して、
ざっと使い方を見ていきます。
1. 数学演算子(mathematical operators)
それではまず、一覧を見てみます。
まずは、足し算/+、 引き算/-、 掛け算/+ について、
コードを使って確認します。
// TestTasuHikuKakeru.kt(テスト足す引く掛ける)
fun main(){
val a: Int = 12
val b: Int = 34
val answer1: Int = a + b
// 12 + 34 が、answer に、代入/適用 される
println(answer1)
val c: Int = 56
val d: Int = 78
val answer2: Int = c - d
println(answer2)
val e: Int = 90
val f: Int =12
val answer3: Int = e * f
println(answer3)
}
実行結果です。
これに関しては、普通の、算数と同じだと思います。
ただし、掛け算に、
アスタリスク/*
を使うことに、注意しましょう。
普通の算数通りな感じですが、
%(剰余算)、/(割り算)
に、関しては、説明と、注意すべきことがあります。
まずは、%(剰余算) について、説明します。
剰余算/じょうよざん とは、
2つの数を割った余りを、求めること
ですので、例えば、
3 ÷ 2 → 1 余り1
100 ÷ 3 → 33 余り1
ということですね。
ただ、気を付けることがあるようです。
負の数で使う時:調べましたが、分かりませんでした。
/ よって、詳細を知らない人は、
/ 負の数/マイナス/- では、
/使わない方がいいと思います。
また、これは、自分で試したのですが、小数で、
計算すると、訳の分からない答になります。
これも、よく知らない人は、使わない方が、いいのではと思います。
また、どんな時に使うのかも、よく分かりませんでしたが、
ゲームで使うと便利というのを、ちらっと見たので、
考えますに、トランプを何人かに配って、「何枚余るのか」とかに、
使うのではないかと、ふと思いました。
例えば、ババ1枚混ぜると、13×4+1 で、55枚。
55枚 ÷ 4人 → ひとり13枚 で、余りが、3枚
よくわからないことが多くて、申し訳ありませんが、
まあ、正の整数でのみ、使うとしても、
使う場面はあるかもしれませんね。
それでは、これも、コードを使って確認してみましょう。
// TestJoyozan.kt(テスト剰余算)
fun main() {
// 55枚のカードを4人に配ったら何枚余るか?
val cards: Int = 55
val player: Int = 4
val answer1 = cards % player
println("answer1: ${answer1}")
// 小数での剰余算をテストしてみる
val x: Double = 6.3
val y: Double = 0.7
val answer2: Double = x / y
println("answer2: ${answer2}")
// 普通の割り算
// この答には、文句はありません。
val answer3: Double = x % y
println("answer3: ${answer3}")
// なんで、0.0 にならないのか?
// もっとも、2.220446049250313E-16
// 自体がわからないのですが。
}
実行結果です。
正の 整数/Int型 どうしでの計算には、問題はないでしょう。(answer1)
でも、小数での、答は、おかしくないでしょうか?(answer3)
これをやるには、特別なやり方があると思います。
どうして、そう思うのかというと、
負の数での剰余算
で、検索すると、私は読んでも分かりませんでしたが、
解決策が示してありました。
きっと、この場合も、解決策はあるとは思いますが、
分かりませんでした。
まあ、ここは、
Androidプログラミングの、入門レベルでのサンプルアプリ
を、作るための、対応講座ということで、逃げさせていただきます。
でも、正の整数どうしなら、OK ということでも、
役に立つ可能性は十分あると思います。
今度は、/(割り算) について、
考えてみましょう。
まず、一番よく知られていると思わるのが、
0で(0を、ではなく)割っては、いけない!
/ そもそも、0 で、割るということの意味が分かりませんが。
/ ArithmeticException(例外/エラー)が、起こります。
/ ここを、追及するのは、やめときます。
/ 今の段階では、あまり意味がなさそう。
/ TryKotlinなどで、簡単に試せます。
それ以外で、気を付けることは、
Int型 ではなく、Double型 を、使って実行するということ
です。
この理屈に関しては、
Int型どうし の計算では、答を、Int型 で、返すからなのですが、
少なくとも、片方を、Double型 にしてください。
例えば、
val z: Double = 1 / 3
のようなコードを、IntelliJで、書くと、
Type mismatch.
Required: Double
Found: Int
「タイプ/型 が違います、、Double型 が欲しいと言っていますが、
1/3 の値は、Int型 になります。」
と、言ってきて、赤色の波線が引かれます。
では、こんどは、うまくいく、Double型 を使ったコードだけ試します。
// TestWrizan.kt (テスト割り算)
fun main(){
println(1.0/3.0)
}
実行結果は、こうなります。
2. 代入演算子(=)
今まで、散々使ってきて、今更な感じですが、
本当に、初めてプログラミングをやるという人には、
大切なことだと、気づきました。
=演算子
は、
val 変数: 変数の型 =(右の値を左の変数に適用します) 値
val x: Int = 123
のような場合、
Int型リテラルの値123 を、変数x へ、代入しました
ということになります。
このことに関して、リファレンスを調べていたら、関数 の、引数 に、デフォルト値 を、
設定するためにも、使うことが分かりました。
もし、頻繁な使い方であれば、改めて、書きます。
しかし、Kotlin は、本当に、表現力豊か!それとも普通?
URL: https://kotlinlang.org/docs/reference/functions.html#default-arguments
/ の、Default Arguments のところ.
無視する演算子 一覧/例
+=, -=, *=, /=, %=
++, --
これらの演算子は使った方がいいのですが、
いきなりたくさん覚えるのは、大変ですし、
今まで説明してきた演算子で、代用できます。
また、++ などは、
++x
x++
のように、2通りの使い方があり、
微妙に、アクションが違います。
まあ、これで問題になることは、ほとんどないですが、
私は、まだ、使いこなせないので、使いたくないです。
それで、代用の話ですが、
x += 1、前に置く++x
に関しては、
x = x + 1
と、同じです。
まあ、私は、後置演算子を使って(x++)、
頭を悩ませたくないので、当分は、無視するつもりです。
パフォーマンス の、問題もあるらしいですが、
もし、私がプログラミングが、うまくなったら、じっくり考えてみます。
これらの演算子は、無理して覚えなくても、
最初のうちは、大丈夫だと、私は思っています。
3. 比較演算子(comparison operators)
それでは、まず、一覧を見てみましょう。
上の4つに関しては、理屈を覚えれば、
簡単だと思います、が、、
下の2つ
に、関しましては、少しややこしい話があります。
まず、分かりやすい、上の4つから、話していきます。
では、いつものように、コードを実行してみます。
これに関しては、特に問題なく理解できると思います。
では、問題の下の2つの話に入りましょう。
== は、
数値型 (Byte, Short, Int, Long, Float, Double)
Boolean (true, false)
Char型(数値に、変換できる)
String型
に、関しては、
同じ内容かどうか?
また、
それ以外の、オブジェクト(Kotlin は、すべてがオブジェクトです)
に関しては、
内容は当然として、全く同じものかどうか?
(たとえ内容が同じでも、全く同じものでなければ、false になります。)
を比べます。
また、同様に、!= は、
数値型、Boolean型、Char型、String型
に関しては、
同じ内容ではないかどうか?
そして、
それ以外の、オブジェクト(Kotlin は、すべてがオブジェクトです)
では、
全く同じものではないかどうか?
(同じ内容でも、同じものでなければ、true、
違う内容であれば、同じもののはずがないので、true
同じ内容で、しかも、同じものであれば、falseです。)
を、比べます。
そして、それぞれ正しい時には、true、
間違っているとき内は、falseを、返します。
まとめ