懐かしむためのアレ

どうでもいいこと書きます

Kotlin学習メモ2

つづき

今回はコレクションについてのメモ

Kotlinのコレクション

  • リスト
  • セット
  • マップ

リスト

Kotlinではコレクションに読み取り専用なものと変更可能なものがある。

リストの場合、読み取り専用はlistOf関数、変更可能はmutableListOf関数を使用してオブジェクトを生成する。

// 読み取り専用 要素の追加や削除はできない
val strs: List<String> = listOf('a', 'b', 'c')
strs.add('d') // -> エラー

// 変更可能
val strs: MutableList<String> = mutableListOf('a', 'b', 'c')
strs.add('d') // -> [a, b, c, d]

MutableListはListを継承して要素の追加、削除のメソッドが定義されているので 以下のようなことできてしまい、Listはイミュータブル(変更不可)ではなく、あくまで読み取り専用

val ints = mutableListOf(1, 2, 3)
val list: List<Int> = ints

ints.add(4)
// ints -> [1, 2, 3, 4] 
// list -> [1, 2, 3, 4]

セット

集合を表すコレクション。重複がない。
読み取り専用と変更可能はそれぞれ、setOf関数とmutableSetOf関数でオブジェクトを生成できる。
順序が保証されていないので、リストのようにインデックスでアクセスできない。

val ints: Set<Int> = setOf(1, 2, 3, 4, 4)
ints // -> [1, 2, 3, 4]

val ints: Set<Int> = mutableSetOf(1, 2, 3, 4)
ints.add(10)
ints // -> [1, 2, 3, 4, 10]

マップ

キーと値を持つコレクション。
キーを指定すると対応した値が取り出せる。
キーと値はそれぞれ型を指定することができる。
読み取り専用と変更可能はそれぞれ、mapOfとmutableMapOf関数でオブジェクトを生成できる。

val map: MutableMap<Char, Int> = mutableMapOf('A' to 10, 'B' to 11)
map // -> {'A'=10, 'B'=11}

map['A'] // -> 10
map += 'F' to 15
map // -> {'A'=10, 'B'=11, 'F'=15}

map['C'] // -> null - 存在しないキーはnullが返る

Kotlin学習メモ1

Android開発やりたい、Javaは全然分からない、Kotlinっていうよさげな言語でも開発できるらしい、じゃあKotlinやるか。

てなわけで、以下の本買ってきたのでKotlinの勉強始めます。

以下、適当メモ(間違ってたりするので誰か指摘して欲しい…)

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

変数

以下のような文法で変数を宣言できる。
val 変数名: 型 = 式

  • valは代入後に値を変えることできず、varを使うことで再代入可能な変数になる。
  • セミコロンはいらない。
  • Stringはダブルクォーテーション、Charはシングルクォーテーションで囲む。
  • 暗黙的な型変換はしない。
val str1: String = "Hello, World"
var str2: String = "HogoHoge"

val int: Int = 1
val long: Long = int // エラー

str1 = "Hello"       // エラー
str2 = "Hello"       // OK

val number = 100     // 型の宣言は省略可能

文字列

val a_str = "Hatena"
val b_str = "blog"

// 文字列連結 ->  Hatena blog
a_str + b_str 

// Pythonみたくインデックスで参照できる(forでイテレートも可) -> 't'
a_str[2]

// 式埋め込み -> Hello Hatena
"Hello ${a_str}" 

// raw string 記述したテキストがそのままStringになるやつ
// 改行も含む
"""
はてなぶろぐ
Hatena  Blog

"""

// 長さを返す -> 11
a_str.length

// 等しいかどうか -> false
a_str.equals(b_str) 

// 空文字か空白のみの文字列のときtrueを返す -> false
a_str.isBlank() 

つづく

近々やりたいこととか

もう2017年も5月に入ってしまい、せっかく通勤用に買った春物の服も暑くて着られなくなってしまう… そんな時期になってしまったけれど今更やりたいことを書く。

・英語の勉強

最も優先してやりたいこと。
今まで英語とは無縁の世界で生きてきてしまって、危機感を感じてしまったというのもあるけれど、 一番は「自分に自信をつけるため」である。 なんで英語かって言われると、わりと直感。
プログラムやる上で出来たほうが良いとかってのは後付けで、とりあえずTOEICとか目に見える形で実力が欲しい。そして自分が努力できることを知りたい。
英語上達完全マップ ここなんかを参考にして1からやっていくつもり。

・アプリ開発

ずーーーっとアプリ作りたいって思ってたのにやってなかったこと。
Androidでもiosでもどっちでもいいんだけど実はios端末をなにひとつ持ってないのでAndroidかなぁと。 今更Javaとかやりたくないしやるならkotlinとやらで書いてみたい。 とりあえずmac欲しい。

・投資

実は2月くらいから現物株をやっているのだけれど、
右も左もわからない初心者なのでもうちょっと勉強してうまく立ち回りたい。
(現在含み損6万程度…)

・読書

ここ数年で本を読むことがわりと好きだということに気づいたので継続して色々読みたい。
よく、どうゆう本読むの?とか好きな作家は?とか聞かれるけれど、自分としては面白い本ならばなんでも読むスタイルでいる。 面白ければラノベだって新書だってなんでもこい!という感じ。
今現在も、ソードアートオンラインの映画に影響されて原作を読んでたりするしね。




とりあえず、不毛な時間を過ごさないようにしていきたい。

LINE NotifyをPythonで使ってみる

LINE NotifyをPythonで使ったときのメモです。

動作環境

  • Python 3.5.2
  • requests 2.11.1

準備

公式サイトにログインし、マイページから通知を送信するトークルームのトークンを発行します。 次に、トークンを発行したグループにLINE Notifyの公式アカウントを招待したら事前準備完了です。

プログラム

import requests

payload = {'message': 'test'} # 通知させたいメッセージ
headers = {'Authorization': 'Bearer ' + ACCESS_TOKEN} # 発行したトークン
r = requests.post('https://notify-api.line.me/api/notify', data=payload, headers=headers)
print(r)

ちなみにスタンプも使えるようになったみたいで、 こちらのリストから使いたいスタンプのIDを指定すればそのスタンプが送られてきます。

import requests

payload = {'message': 'test', 'stickerPackageId': 2, 'stickerId': 144}
headers = {'Authorization': 'Bearer ' + ACCESS_TOKEN} # 発行したトークン
r = requests.post('https://notify-api.line.me/api/notify', data=payload, headers=headers)
print(r)

例えば、上記のようにstickerPackageIdstickerIdに数字を付与すると、

f:id:buimo:20161225020945j:plain

指定したスタンプが送られてくるのが確認できました。

まとめ

LINE Messaging APIと比較するとかなり手軽に使えるので個人的には結構好きですね。
最近、Raspberry Piを購入したので連携させてなにか面白いものできないかなぁ