Postfix Completionを使ってちょっと早くコーディングしよう
Postfix Completionとは
後置補完と言われ、通常右に行ったり左に行ったりしながら書かなければならないif文などを流れるように書くことができる方法です。
これを用いることで、頭の中でプログラムを組み立てていく順番通りにコードを記述していくことができます。
AndroidStudio含めJetBrains系のIDEにはデフォルトで搭載されている機能なので誰でもすぐに使うことができます。
使い方
Postfix Completionに対応した文字列を入力した後Tabキーを押すことで変換されます。
具体例
この説明を読んでもいまいちよくわからないかと思うので具体例をあげて説明していきたいと思います。
基本的にはPreferencesにある説明と同じですが、冗長な部分は省いて記述しています。
普段筆者はAndroidアプリの開発をKotlin + Android Studioで行っているため、今回はKotlinでの説明となりますが、JetBrainsのそれぞれのIDEにそれぞれの言語に対応したpostfix completionが用意されていますのでKotlin以外で気になった方は具体例を読み飛ばし、
Preferences -> Editor -> General -> Postfix Completion
からどんなものがあるか確認してみてください。
arg
s.arg
function(s)
変数名.arg
と入力し、Tabキーを押すと、変数名がカッコで囲われ、自動的にカーソルが括弧の手前に移動します。これで流れるように関数名を入力して、引数の指定までできます。
arrayOf
val x = s.arrayOf
val x = arrayOf(s)
変数名.arrayOf
と入力し、Tabキーを押すと、変数がarrayOf()で囲われます。
listOf
val x = s.listOf
val x = listOf(s)
変数名.listOf
と入力し、Tabキーを押すと、listOf()で囲われます。
assert
val x = true
x.assert
val x = true
assert(x) { "" }
Boolean型の変数に対し、変数名.assert
と入力し、Tabキーを押すと、変数がassertで囲われる + { "" }
まで補完してくれ、""の中にカーソルを移動してくれます。
for
val list = listOf<Int>()
list.for
val x = listOf<Int>()
for (s in list) {
}
Listに対し、変数名.for
と入力し、Tabキーを押すと変数がforで囲われ、上記ではs
の部分にカーソルを移動してくれます。
if
val a = true
a.if
val a = true
if (a) {
}
Boolean型の変数に対し、変数名.if
と入力すると変数名をif
で囲ってくれ、中括弧も補完してくれた後、中括弧の中にカーソルを移動してくれます。
else
val a = true
a.else
val a = true
if (!a) {
}
Boolean型の変数に対し、変数名.else
と入力すると変数名をif
で囲ってくれ、変数名に!
が付いた条件式(否定)を生成してくれます。あとはifと同様に中括弧も補完してくれた後、中括弧の中にカーソルを移動してくれます。
not
val a = true
if (a.not){
}
val a = true
if (!a) {
}
ifの条件式部分でBoolean型の変数に対し変数名.not
と入力すると、否定する条件式を生成してくれます。上記変数名.else
の方を利用することの方が多いと思います。
iter
val list = listOf<Int>()
list.iter
val x = listOf<Int>()
for (s in list) {
}
Listに対し、変数名.iter
と入力し、Tabキーを押すと変数がforで囲われ、上記ではs
の部分にカーソルを移動してくれます。forと全く同様な挙動です。
nn
fun foo(x: Any?) {
x.nn
}
fun foo(x: Any?) {
if (x != null) {
}
}
null許容型の変数に対し、変数名.nn
と入力し、Tabキーを押すとその変数がnullではない条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。
notnull
fun foo(x: Any?) {
x.notnull
}
fun foo(x: Any?) {
if (x != null) {
}
}
null許容型の変数に対し、変数名.notnull
と入力し、Tabキーを押すとその変数がnullではない条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。
上記変数名.nn
と同様の動作です。
null
fun foo(x: Any?) {
x.null
}
fun foo(x: Any?) {
if (x == null) {
}
}
null許容型の変数に対し、変数名.null
と入力し、Tabキーを押すとその変数がnullである場合の条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。
par
x.par
(x)
任意の変数に対して、変数名.par
と入力し、Tabキーを押すと変数がカッコで囲われます。
筆者は使いどきがよく分かっていないので分かる方は教えてください。
return
x.return
return x
任意の変数に対して、変数名.return
と入力し、Tabキーを押すと変数をreturnするように変換してくれます。
sequenceOf
val x = "a".sequenceOf
val x = sequenceOf("a")
Stringに対して変数名.sequenceOf
と入力し、Tabキーを押すと変数名をsequenceOf()で囲ってくれます。
setOf
val x = "a".setOf
val x = setOf("a")
Stringに対して変数名.setOf
と入力し、Tabキーを押すと変数名をsetOf()で囲ってくれます。
sout
x.sout
println(x)
任意の変数に対して変数名.sout
と入力し、Tabキーを押すと変数をprintln
で囲んでくれます。
speread
val a = listOf<String>()
a.toTypedArray().spread
val a = listOf<String>()
*a.toTypedArray()
Listに対し、変数名.toTypedArray().spread
と入力し、Tabキーを押すと変数の前に*
を付与してくれます。
try
x.try
try {
x
} catch (e: Exception) {
}
任意の変数に対し、変数名.try
と入力し、Tabキーを押すとtry,catchを生成してtryで変数を囲ってくれます。カーソルはExceptionの前に移動します。
val
foo().val
val foo = foo()
任意の変数に対し、変数名.val
と入力し、Tabキーを押すと、valでの変数宣言を生成してくれます。
when
val x = "String"
x.when
val x = "String"
when (x) {
-> {
}
else -> {
}
}
String型の変数に対し、変数名.when
と入力し、Tabキーを押すと、when式を生成してくれます。
カーソルは矢印の前に移動します。
while
val x = true
x.while
val x = true
while (x){
}
Boolean型の変数に対し、変数名.when
と入力し、Tabキーを押すとwhile文を生成してくれます。
カーソルは中括弧の中に移動します。
自分で作る
左下の + ボタンから任意のPostfix Completionを自分で作ることもできます。
キーの変更
ここではデフォルトであるTabキーを用いた操作で説明しましたが、Space,Enterに変更して利用することができます。
最後に
個々で省略できる操作はほんの少しですが、活用することでコーディングのスピードを上げることができると思います。ぜひみなさん活用してみてください。また、他にもJetBrainsのIDEでこんな便利なものあるよ!って知っている方は是非教えてください!
参考
Postfix Completion
#JetBrainsIDEテクニック – Postfix completion: 後置補完
Discussion