Kotlinの勉強メモ

日本語化
https://sukkiri.jp/technologies/ides/intellij-idea/intellij-idea-mac.html

Kotlin Bootcamp for Programmers 2
https://codelabs.developers.google.com/codelabs/kotlin-bootcamp-basics/#0

  • 変数を宣言する時に自動的に型が設定される(明示的に型を宣言することも可能)
  • 変数に別の方の値を代入するとエラーになる(自動的に型変換されない)
  • val→ 値を変更不可能
  • var→ 値を変更可能
  • 変数の結合は+演算子
  • 通常は変数に null を入れることはできない
  • 入れたい場合はvar marbles: Int? = nullのように?を付けて宣言する
  • null だったらエラーを吐く場合は!!を使う →val len = s!!.length
  • リストの宣言は listOf→val school = listOf("mackerel", "trout", "halibut")
  • 配列の宣言は listOf→val school = arrayOf("shark", "salmon", "minnow")
  • リストは要素数が可変だけど配列の方がアクセスが早い

配列を for ループ

1
2
3
4
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}

配列をインデックス付きの for ループ

1
2
3
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
  • main()に引数を渡す →[実行]> [構成の編集]>[プログラム引数]

関数を1行で書く

1
fun isTooHot(temperature: Int) = temperature > 30

リストから一部だけ抽出

1
2
3
4
5
6
val decorations = listOf("rock", "pagoda", "plastic plant", "alligator", "flowerpot")
// 先頭がpの文字列だけを抽出
val eager = decorations.filter({x -> x[0] == 'p'})
// 以下は等価
// val eager = decorations.filter {it[0] == 'p'}
println("eager: $eager")

ラムダ関数

  • ラムダ関数(無名関数)を waterFilter 変数に入れている
  • 引数として Int 型を受け取り、Int 型を返す
1
2
3
4
5
6
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }

// 引数が1つの場合はitとして表現可能
val waterFilter: (Int) -> Int = { it / 2 }

waterFilter(10)

関数を引数に与える時は::を使う

1
2
fun increaseDirty( start: Int ) = start + 1
println(updateDirty(15, ::increaseDirty))
1
2
fun increaseDirty( start: Int ) = start + 1
println(updateDirty(15, ::increaseDirty))

クラスの変数に設定できる修飾子は以下の4つ
アクセス可能な範囲は以下の通り

  1. public→ どこからでも
  2. internal→ 同じモジュール内であれば
  3. private→ 同じクラス内であれば
  4. protected→ 同じサブクラス内であれば

クラスやクラス内変数はデフォルトだとサブクラスによる上書きはできない
上書きを許可する場合はopenをつける →open val shape = "rectangle"

Aquarium クラスを TowerTank がオーバーライドする例

1
2
3
4
5
6
7
class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width = diameter, length = diameter) {
override var volume: Int
// ellipse area = π * r1 * r2
get() = (width/2 * length/2 * height / 1000 * PI).toInt()
set(value) {
height = ((value * 1000 / PI) / (width/2 * length/2)).toInt()
}
  • ラムダ式のreturnは外側の関数のreturnとなる
  • 関数の早期脱出が目的であればラムダ式ではなく代わりに匿名関数を利用する必要がある

CSSで改行を反映させる方法

CSS で改行を反映させる方法

style="white-space: pre-wrap;"

簡単ですがすぐ忘れちゃうのでメモ。。

VSCode で複数行に跨がる文字列を検索したいとき

例えば以下のような状態で appole と orange が含まれる箇所を検索したい場合など

hoge hoge apple hogehoge
ダミー行
ダミー行
hoge orange hogehoge

以下のように指定すれば OK
入力欄の右端にある正規表現チェックにチェックするのを忘れずに

1
2
apple
*[\s\S]*?orange

ITMS-90809-Deprecated-API-Usageエラーの解消

ITMS-90809-Deprecated-API-Usage エラーの解消方法です。

  1. config.xml に以下の1文を追加する

<preference name="WKWebViewOnly" value="true" />

  1. 以下を実行する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# エラー要因となるプラグインをアンインストール
cordova plugin rm cordova-plugin-wkwebview-engine

# 最新のcordova-plugin-ionic-webviewプラグインをインストール
cordova plugin rm cordova-plugin-ionic-webview
cordova plugin add cordova-plugin-ionic-webview@latest

# 他のプラグインも最新化する
npm install -g cordova-check-plugins
cordova-check-plugins --update=auto

# cordova-iosを6.0.0に
cordova platform remove ios
cordova platform add ios@6.0.0

参考
https://ionicframework.com/blog/understanding-itms-90809-uiwebview-api-deprecation/

JavaScriptでクリップボードにコピーする

html 部分

1
2
<input id="user_id" type="text" style="display: none" value="コピー対象の文言" />
<button class="btn btn-secondary" onclick="copyToClipboard('user_id')">クリップボードにコピー</button>

JavaScript 部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script type="text/javascript">
function copyToClipboard(id) {
var copyTarget = document.getElementById(id)

var textarea = document.createElement('textarea')
textarea.textContent = copyTarget.value
document.body.appendChild(textarea)

var selection = document.getSelection()
var range = document.createRange()
range.selectNode(textarea)
selection.removeAllRanges()
selection.addRange(range)

console.log('copy success', document.execCommand('copy'))
selection.removeAllRanges()

document.body.removeChild(textarea)

alert('コピー完了 : ' + copyTarget.value)
}
</script>

ググると以下のやり方が出てきましたが、これだと Chrome でコピーできないので上のやり方にしました
https://www.w3schools.com/howto/howto_js_copy_clipboard.asp

参考
https://stackoverflow.com/questions/47879184/document-execcommandcopy-not-working-on-chrome?rq=1

【ラベルあり】inputタグのcheckboxで複数項目を配列で送信する方法

input タグの checkbox で複数項目を配列で送信する方法です
大した内容じゃないけどラベル付きのサンプルがなくて微妙にハマったので一応メモ
たまにしか使わないから使い方忘れちゃうんですよね、、

1
2
3
4
5
<div class="form-group">
<div>ジャンル</div>
<input type="checkbox" id="option1" name="genre[]" value="ジャンル1" /><label for="option1"> ジャンル1</label>
<input type="checkbox" id="option2" name="genre[]" value="ジャンル2" /><label for="option2"> ジャンル2</label>
</div>

【Cordova】ビルド・リリース手順

はじめに

Cordova を利用していた場合のアプリリリースまでの手順です。
半年前くらい(2020/01 くらい)の情報なので古い情報があるかもしれませんのでご了承ください

アプリへの Cordova 導入手順は手前味噌ですが以下をご参考ください
Vue CLI 3.0 で Cordova を導入したら割とハマった

ビルドで xcode-select: error が発生した場合は以下を参考に解決する
Ionic の iOS のビルドのエラー

【PHP】Laravelの使い方メモ

はじめに

最近 Laravel を使うことが増えました。
だんだん使い方が分かってきたのですが、おそらく数年後には忘れてしまっていると思います。。
その時のために使い方を簡単にメモしておきます

【BTC】API取引可能な日本の仮想通貨取引所の手数料を整理してみた

はじめに

最近はアービトラージ bot を作ってます。
一応 BTC は取引できるようになって、今度はアルトコインも手を出そうかなあと思ってます。

で、どの取引所にどの通貨があってそれぞれ手数料はどんな感じなんだっけ?
が分からなくなってきたのでまとめておきます。

対象は一旦 JPY 基軸だけにしました。
(BTC/ETH とかは調べてないです)

API がない取引所は対象外です。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×