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を、返します。


まとめ