🚀

Postfix Completionを使ってちょっと早くコーディングしよう

2021/04/29に公開

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

Before
s.arg
After
function(s)

変数名.argと入力し、Tabキーを押すと、変数名がカッコで囲われ、自動的にカーソルが括弧の手前に移動します。これで流れるように関数名を入力して、引数の指定までできます。

arrayOf

Before
val x = s.arrayOf
After
val x = arrayOf(s)

変数名.arrayOfと入力し、Tabキーを押すと、変数がarrayOf()で囲われます。

listOf

Before
val x = s.listOf
After
val x = listOf(s)

変数名.listOfと入力し、Tabキーを押すと、listOf()で囲われます。

assert

Before
val x = true
x.assert
After
val x = true
assert(x) { "" }

Boolean型の変数に対し、変数名.assertと入力し、Tabキーを押すと、変数がassertで囲われる + { "" } まで補完してくれ、""の中にカーソルを移動してくれます。

for

Before
val list = listOf<Int>()
list.for
After
val x = listOf<Int>()
for (s in list) {                          
}

Listに対し、変数名.forと入力し、Tabキーを押すと変数がforで囲われ、上記ではsの部分にカーソルを移動してくれます。

if

Before
val a = true
a.if
After
val a = true
if (a) {
}

Boolean型の変数に対し、変数名.ifと入力すると変数名をifで囲ってくれ、中括弧も補完してくれた後、中括弧の中にカーソルを移動してくれます。

else

Before
val a = true
a.else
After
val a = true
if (!a) {
}

Boolean型の変数に対し、変数名.elseと入力すると変数名をifで囲ってくれ、変数名に!が付いた条件式(否定)を生成してくれます。あとはifと同様に中括弧も補完してくれた後、中括弧の中にカーソルを移動してくれます。

not

Before
val a = true
if (a.not){
}
After
val a = true
if (!a) {
}

ifの条件式部分でBoolean型の変数に対し変数名.notと入力すると、否定する条件式を生成してくれます。上記変数名.elseの方を利用することの方が多いと思います。

iter

Before
val list = listOf<Int>()
list.iter
After
val x = listOf<Int>()
for (s in list) {                          
}

Listに対し、変数名.iterと入力し、Tabキーを押すと変数がforで囲われ、上記ではsの部分にカーソルを移動してくれます。forと全く同様な挙動です。

nn

Before
fun foo(x: Any?) {
    x.nn
}
After
fun foo(x: Any?) {
    if (x != null) {
    }
}

null許容型の変数に対し、変数名.nnと入力し、Tabキーを押すとその変数がnullではない条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。

notnull

Before
fun foo(x: Any?) {
    x.notnull
}
After
fun foo(x: Any?) {
    if (x != null) {
    }
}

null許容型の変数に対し、変数名.notnullと入力し、Tabキーを押すとその変数がnullではない条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。
上記変数名.nnと同様の動作です。

null

Before
fun foo(x: Any?) {
    x.null
}
After
fun foo(x: Any?) {
    if (x == null) {
    }
}

null許容型の変数に対し、変数名.nullと入力し、Tabキーを押すとその変数がnullである場合の条件式が定義されたif文と中括弧が生成され、中括弧の中にカーソルを移動してくれます。

par

Before
x.par
After
(x)

任意の変数に対して、変数名.parと入力し、Tabキーを押すと変数がカッコで囲われます。
筆者は使いどきがよく分かっていないので分かる方は教えてください。

return

Before
x.return
After
return x

任意の変数に対して、変数名.returnと入力し、Tabキーを押すと変数をreturnするように変換してくれます。

sequenceOf

Before
val x = "a".sequenceOf
After
val x = sequenceOf("a")

Stringに対して変数名.sequenceOfと入力し、Tabキーを押すと変数名をsequenceOf()で囲ってくれます。

setOf

Before
val x = "a".setOf
After
val x = setOf("a")

Stringに対して変数名.setOfと入力し、Tabキーを押すと変数名をsetOf()で囲ってくれます。

sout

Before
x.sout
After
println(x)

任意の変数に対して変数名.soutと入力し、Tabキーを押すと変数をprintlnで囲んでくれます。

speread

Before
val a = listOf<String>()
a.toTypedArray().spread
After
val a = listOf<String>()
*a.toTypedArray()

Listに対し、変数名.toTypedArray().spreadと入力し、Tabキーを押すと変数の前に*を付与してくれます。

try

Before
x.try
After
try {
    x
} catch (e: Exception) {
}

任意の変数に対し、変数名.tryと入力し、Tabキーを押すとtry,catchを生成してtryで変数を囲ってくれます。カーソルはExceptionの前に移動します。

val

Before
foo().val
After
val foo = foo()

任意の変数に対し、変数名.valと入力し、Tabキーを押すと、valでの変数宣言を生成してくれます。

when

Before
val x = "String"
x.when
After
val x = "String"
when (x) {
    -> {
}
    else -> {
    }
}

String型の変数に対し、変数名.whenと入力し、Tabキーを押すと、when式を生成してくれます。
カーソルは矢印の前に移動します。

while

Before
val x = true
x.while
After
val x = true
while (x){
}

Boolean型の変数に対し、変数名.whenと入力し、Tabキーを押すとwhile文を生成してくれます。
カーソルは中括弧の中に移動します。

自分で作る

左下の + ボタンから任意のPostfix Completionを自分で作ることもできます。

キーの変更

ここではデフォルトであるTabキーを用いた操作で説明しましたが、Space,Enterに変更して利用することができます。

最後に

個々で省略できる操作はほんの少しですが、活用することでコーディングのスピードを上げることができると思います。ぜひみなさん活用してみてください。また、他にもJetBrainsのIDEでこんな便利なものあるよ!って知っている方は是非教えてください!

参考

Postfix Completion
#JetBrainsIDEテクニック – Postfix completion: 後置補完

株式会社ゆめみ

Discussion