長い Scala 関数シグネチャをどこで分割しますか? 質問する

長い Scala 関数シグネチャをどこで分割しますか? 質問する

次のような定義

def foo(x: Int) = x + 1

短くて見た目もきれいですが、署名自体が不快なほど長くなると、

def foo[T <: Token[T]](x: ArrayBuffer[T], y: T => ArrayBuffer[() => T]): (T, T, BigDecimal) = {
    // ...
}

どこで分けたらいいのか分かりません。以下のすべてが不自然だと思います。

def foo(
    x: Int,
    y: Int
): Int = {
    // ...
}

def foo(
        x: Int,
        y: Int
    ): Int =
{
    // ...
}

def foo(
        x: Int,
        y: Int
    ): Int
= {
    // ...
}

def foo(
        x: Int,
        y: Int
    ):
Int = {
    // ...
}

しかし、これらのいずれかに慣れる必要がある場合、どれがチームメイトに最も迷惑をかけないのでしょうか?

ベストアンサー1

Scala スタイルガイドこれについては何も言及されていません。実際、パラメータの少ないメソッドを使用することを推奨しています :-)。

関数呼び出しの場合、後続の各行が最初の括弧に揃うように分割することをお勧めします。

foo(someVeryLongFieldName,
    andAnotherVeryLongFieldName,
    "this is a string",
    3.1415)

個人的には、あなたの場合、「似たものを一緒に保つ」というルールに従って分割します。

def foo[T <: Token[T]]
       (x: ArrayBuffer[T], y: T => ArrayBuffer[() => T])
       : (T, T, BigDecimal) = {
  // ...
}

したがって、パラメータは 1 行、戻り値の型は 1 行、型制限は 1 行になります。

おすすめ記事