Apache Beam + Kotlin = ❤️

Apache BeamのサンプルがKotlinで利用可能になりました!

Kotlin

もしあなたがプロのキャリアでJavaを使ってきた人なら、Kotlinという、JVM向けの静的型付けのオープンソース言語も聞いたことがあるでしょう。これはAndroid開発者に好まれており、パフォーマンスや安全性を犠牲にすることなく、Javaよりも簡潔でクリーンなコードを可能にする多くの機能が理由です。

同じ方向へ一歩踏み出し、Javaと並行してKotlinでのBeam SDKのサンプルをリリースできることを大変嬉しく思います!

(注:この記事を書いている時点では、WordCountサンプルのみがKotlinに追加されており、より多くのサンプルが準備中です)

コードスニペット

KotlinのサンプルがJavaとどのように比較されるかを示す、いくつかの簡単なコードスニペットを次に示します。

Java

 String filename = String.format(
                    "%s-%s-of-%s%s",
                    filenamePrefixForWindow(intervalWindow),
                    shardNumber,
                    numShards,
                    outputFileHints.suggestedFilenameSuffix);

Kotlin

 // String templating
 val filename = "$filenamePrefixForWindow(intervalWindow)-$shardNumber-of-$numShards${outputFileHints.suggestedFilenameSuffix)"

Java

public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
    @Override
    public String apply(KV<String, Long> input) {
        return input.getKey() + ": " + input.getValue();
    }
}

Kotlin

public class FormatAsTextFn : SimpleFunction<KV<String, Long>, String>() {
    override fun apply(input: KV<String, Long>) = "${input.key} : ${input.value}"  //Single line functions
}

Java

if(tableRow != null){
    formatAndInsert(tableRow);
}

Kotlin

tableRow?.let{
    formatAndInsert(it)  // No need for null checks
}

Java

String tableName = "testTable";

Kotlin

val tableName = "testTable"  // Type inferencing

コントリビューター歓迎!

現在、さらにサンプルを追加し、既存のサンプルを合理化していますが、コードスニペットに関するフィードバックをお待ちしています。こちらで確認できます:https://github.com/apache/beam/tree/master/examples/kotlin

すでにApache BeamでKotlinを使用している場合は、既存のJavaのサンプルをKotlinに変換するのを手伝っていただけると大変助かります。

ありがとうございます。皆様からのフィードバックを楽しみにしています!