Как распознать между вызовом функции и созданием экземпляра класса в IntelliJ или Android Studio?

#android-studio #kotlin #intellij-idea

#android-studio #kotlin #intellij-идея

Вопрос:

Я изучаю Kotlin в Android, но многие коды являются ненужными, потому что у меня проблема с распознаванием, когда какой-либо код является функцией вызова или экземпляром класса.

Код не работает, но, например, хорош:

     class Boo{
        val callFromFoo: Int = Foo(1)
        val instanceFoo: Foo = Foo(2)
    
        fun Foo(id: Int): Int {
            return id
        }
    }
    
    class Foo(val id: Int)
  

Я обеспокоен, потому что вызов Foo(1) и создание экземпляра Foo (2) — это один и тот же код, без распознавания IDE различий.
Примечание: явное объявление не является стандартным в Kotlin.

Ответ №1:

Если у вас есть классы в одном файле / пакете, вы могли бы использовать отражение следующим образом:

 class Boo {
    val callFromFoo: Int = Foo(1)
    val instanceFoo: Foo = requireNotNull(Foo::class.primaryConstructor).call(2)

    fun Foo(id: Int): Int {
        return id
    }
}

class Foo(val id: Int)
  

Если у вас есть классы в разных пакетах, вы могли бы создать экземпляр объекта, указывающего этот пакет. Вот так:

 class Boo {
    val callFromFoo: Int = Foo(1)
    val instanceFoo: Foo = com.android.example.package2.Foo(2)

    fun Foo(id: Int): Int {
        return id
    }
}
  

Я бы не рекомендовал ни одно из этих решений.

Обратите внимание, что классы, как правило, являются существительными, такими как Navigator , LoginUseCase , User , Logger navigateTo() и т.д., А функции, как правило, являются глаголами или, по крайней мере, используют глаголы, такие как login() , processData() , log() ,, и т.д. Я не думаю, что у них когда-либо должно быть одно и то же имя.

Кроме того, я думаю, что стиль кодирования, который вы используете, не очень хорошо сочетается с Kotlin. Это создаст ненужную путаницу между функциями и классами, даже если они имеют разные имена. Я предлагаю вам следовать официальному руководству по стилю кодирования Kotlin. Имена функций должны начинаться со строчной буквы, а имена классов — с заглавной, чтобы избежать путаницы.

Обновить

Если вы хотите придерживаться своего соглашения о кодировании и различать вызов конструктора и вызов функции, вы можете выбрать разные цвета для каждого в Android Studio или IntelliJ.

Android Studio / IntelliJ:
Файл> Настройки > Редактор> Цветовая схема > Kotlin

Цветовая схема

Результат:
Цветовая схема результата

Комментарии:

1. Спасибо Шарма, я программист на C #, где есть другой стиль кодирования. Kotlin не для меня естественен, поэтому я ищу другой способ лучшей акклиматизации через IDE

2. @Abedron Я обновил ответ, включив в него решение с использованием IDE. Я также программист на C #. Я только что писал Kotlin в течение нескольких месяцев. На мой взгляд, легче привыкнуть к написанию имен функций в нижнем регистре, чем привыкнуть к любому IDE-решению.

3. Спасибо, это намного лучше;)