↑今回から日付を入れます。
仕事ではあまり触れる機会が少ないKotlin。
JavaやPHPの後だと忘れがちなんでそのまま実行できるような
Kotlin思い出す用のソースを貼っておきます。
あとで綺麗に見えるように編集するかも。→しました(2017/06/22。ただしKotlinには対応してないんでハイライトがない。。。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 | fun main(args: Array<String>) { // ←JVM言語ですが、このように一番外枠がClassでなくても大丈夫。Ptyhonのモジュールのような考え方です。 // Javaと相互互換を保証しています。ので、Javaの資産がそのまま使えます。またこのファイルのメソッドなどもJavaから呼び出せます。 println(java.sql.Timestamp.valueOf("2013-10-11 12:13:4")) System.out.println("Javaによるsysout") // (アドレスが)変更できない変数の宣言は「val」(Javaで言う所のfinal) val str: String = "Hello, World!" val num: Int = 5 // プリミティブはない。IntとかLongとか。Javaでいうラッパーを使用する。ここらへんもPythonに近いですね。 // 3項演算子の代わりにこんな文法がある val res = if (num.equals(5)) { "Hi, Tom!" } else { "Hi, Bob!" } println(str + num.toString()) println(res) // (アドレスが)変更できる変数の宣言は「var」。Kotlinでは可能な限り「val」を使うことを推奨 var str2: String = "test" str2 = "test2" println("str2:" + str2) val str3: String = "test" // str3 = "test3" ←これはコンパイルエラー。リテラルはアドレスが別になるため。 // str3 = str3 + str2 ←よってこれもコンパイルエラー。StringBuilderのように使う場合はvarを使用する。 str2 += "abcd" println("文字列の変更。test2 + abcd = " + str2) // 型の変換は変換元のメソッドで行う val int1: Int = "123".toInt() val int2 = int1 * 10 println(int2.toString()) //Int.parseInt("123") ←こんなメソッドはない // Switchはなくて、whenを使う val color: String = "青" val piyo = when (color) { "青" -> "blue" "赤" -> "red" else -> "other" } println(piyo) // (中身を)変更できないリスト。Pythonで言う所のタプル。 // (豆知識)Pythonでも可能な限りリストではなくタプルを推奨してますよね。 println("変更できないリスト") val list: List<String> = listOf("1", "2", "5") // list.add("5") ←変更できないリストなのでaddメソッドは存在しない for (value1 in list) { println(value1) } // (中身を)変更できるリスト。Pythonで言う所のリスト println("変更できるリスト。宣言は「val」なところに注目。この場合はアドレスが変わらないという意味") // JavaでfinalのListにもaddはできますよね val mutableList: MutableList<Int> = mutableListOf(9, 8, 7, 6, 5) mutableList.add(4) for (value1 in mutableList) { println(value1) } // JavaのObjectにあたるクラスはAnyです val any1: Any = "This is Any." val any2: Any = 123 // Javaと違ってプリミティブがないのでこんな書き方になる。Javaなら「Object any2 = new Integer(123);」とか。 println(any1.toString()) println(any2.toString()) // クラスの使い方。Kotlinでは「new」は不要 val carol = Car(price = 1000000, speed = 250, name = "キャロル") println("name:" + carol.name) // ←実はこれはフィールド(値)を直接参照しているのではなく、プロパティ(getter)の呼び出しです // メソッド呼び出し carol.displayInfo() // Try-Catch try { throw Exception("try-catch") } catch (e: Exception) { println("Error Message:" + e.message) } // ラムダ val sum: (Int, Int) -> Int = { x, y -> x + y } println("ラムダの処理結果→" + sum(1, 2)) // 匿名関数 val sum2 = fun(a: Int, b: Int): Int { return a + b } println("匿名関数の処理結果→" + sum2(1, 2)) // 2つの結果を戻してくれる関数。Javaに欲しかったですよね。 val pair = carol.addNumbers(2, 3) println("2つの結果を返してくれる関数 ひとつめ→" + pair.first + " ふたつめ→" + pair.second) // プライマリコンストラクタの動き val cb400sf = Bike("CB400SF", 200, 800000) println("プライマリコンストラクタで設定されたもの→" + cb400sf.name + "," + cb400sf.maxSpeed + ",\\" + cb400sf.price) // filterの使い方。trueの要素だけ返す val filterSample = arrayOf(1, 2, 3).filter { num -> num != 2 } print("filterの使い方→") for (x in filterSample) { print(x.toString() + " ") } println() // filterNotにすると逆になる val filterNotSample = arrayOf(1, 2, 3).filterNot { num -> num != 2 } print("filterNotの使い方→") for (x in filterNotSample) { print(x.toString() + " ") } println() // forEach println("ListのforEachはJava8と同じ雰囲気で。") listOf(1, 2, 3).forEach { x -> println(x + 1) } // リスト系は他にもMaxとかMinとかDistinctとか便利なのがたくさんある。リファレンスは見たほうがいいです。 // Stringの便利な機能やメソッド println("Stringの便利な機能やメソッド") val a = 2 val b = 3 // もうformatメソッドは必要ありません println("$a + $b = ${a + b}") // 2 + 3 = 5 // ヒアドキュメントも使えます val hereDoc = """ <html> <body> $a + $b = ${a + b} </body> </html> """ println(hereDoc) // Kotlinはnull safetyです。 // 基本的にNull Pointer Exceptionは発生しません。(Javaで定義したメソッドの使い方によってはそれでも起こるけど) // 普通の変数にnullを代入しようとするとコンパイルエラーになります // val nullDesu: String = null ←コンパイルエラー // nullが入り得る場合は明示的に下記のようにしなければいけません val nullDesu: String? = null // println(nullDesu.length) ←わざとぬるぽ起こそうとしてもコンパイルエラー。nullが入り得る変数で危険なことはできない仕様です if (nullDesu != null) { println(nullDesu.length) // nullチェックをするとコンパイルが通ります } // 既存のクラスに機能を追加できる「Extension」という機能 // 今回はStringクラスに機能追加しちゃいます fun String.addShimasu(x: Int): String { return this + x.toString() } println("これがExtensionです!!!".addShimasu(123456)) } // クラスの書き方(Javaっぽく) // ちなみにデフォルトだとclassはpublic finalです。 // また、staticの概念はないです class Car { // getterやsetterは記載不要です。 // 変数名がgetter、setterとして外部と連携します。 // 直接に値(フィールド)にアクセスするのではないので、これらは「フィールド」ではなく「プロパティ」と呼びます。 // 要はJavaで言う所のメンバ変数をprivateで宣言してgetter, setterを用意した状態と同じで、メンバ変数名でgetter, setterが使用できるということです。 val price: Int val speed: Int val name: String constructor(price: Int, speed: Int, name: String) { this.price = price this.speed = speed this.name = name } // 何も返さない時はvoidではなくUnit型 fun displayInfo(): Unit { println("クラスのメソッド呼び出し↓") println("Name:" + this.name) println("MaxSpeed:" + this.speed) println("Price:" + this.price) return } // 複数の値を返せる関数 fun addNumbers(a: Int, b: Int): Pair<Int, Int> { return Pair(a + 1, b + 1) } } // クラスのプライマリコンストラクタの書き方(Kotlinっぽい) class Bike(name: String, maxSpeed: Int, price: Int) { val name = name val maxSpeed = maxSpeed val price = price } |
0 件のコメント:
コメントを投稿