66936


Kotlinにまだ慣れていないのですが下記のようなクラスを用意したとして

[code]

    class Hoge(
        val name: String,
        val age: Int
    )
    
[/code]

Hogeを生成するときに、下記のように名前付き引数の場合でもOKだし、

[code]

    val h = Hoge(
        name = "AAA",
        age = 1
    )
    
[/code]

また下記のように名前を付けなくてもOKであることに気づきました。

[code]

    val hh = Hoge(
        "BBB",
        2
    )
    
[/code]

呼び出す際に名前付きを必須にすることはできますか？（できない場合はlintツールかなにかでコーディング規約的に守っていくことになるのでしょうか？）

コンストラクタに関わらず、一般的な関数でも同じことを確認しましたので、名前付きでの呼び出しを必須にする方法はありますか？


CC BY-SA 4.0
2020-05-22T10:52:50.120
66883
2020-05-24T04:06:23.670
2020-05-22T12:34:18.323
9008
9008
question
kotlin
Kotlinで名前付きでの呼び出しを必須にできないか？


  * [Kotlin で引数の名前つきでの呼び出しを強制する裏ワザ | d.sunnyone.org](http://d.sunnyone.org/2017/06/kotlin.html)
  * [本家での似たような質問](https://stackoverflow.com/questions/37394266/how-can-i-force-calls-to-some-constructors-functions-to-use-named-arguments)

に裏技ちっくなものを発見しました。

>
[code]

>     /* requires passing all arguments by name */
>     fun f0(vararg nothings: Nothing, arg0: Int, arg1: Int, arg2: Int) {}
>     f0(arg0 = 0, arg1 = 1, arg2 = 2)    // compiles with named arguments
>     //f0(0, 1, 2)                       // doesn't compile without each
> required named argument
>  
>     /* requires passing some arguments by name */
>     fun f1(arg0: Int, vararg nothings: Nothing, arg1: Int, arg2: Int) {}
>     f1(arg0 = 0, arg1 = 1, arg2 = 2)    // compiles with named arguments
>     f1(0, arg1 = 1, arg2 = 2)           // compiles without optional named
> argument
>     //f1(0, 1, arg2 = 2)                // doesn't compile without each
> required named argument
>  
[/code]

でも **微妙すぎ** ですね....

厳密には下記で、 **名前付きを必須にできるようにする方法を議論中** のようです。  
[Enforce parameter usage only in named form :
KT-14934](https://youtrack.jetbrains.com/issue/KT-14934)


CC BY-SA 4.0
2020-05-24T04:06:23.670
66936
2020-05-24T04:06:23.670
9008
66883
answer