Каковы преимущества определения переменной в одной строке и создания ее экземпляра в следующей строке - PullRequest
0 голосов
/ 02 марта 2019

Например, рассмотрим слайд из Google I / O '17 «Анимация Android Весна в жизнь»:

enter image description here

SpringForce force = new SpringForce(0)
        .setDampingRation(0.4f)
        .setStiffness(500f);
for (int i = 0; i < heads.getChildCount(); i++) {
    View child = heads.getChildAt(i);
    SpringAnimation anim;
    anim = new SpringAnimation(child, DynamicAnimation.ROTATION);
    anim.setSpring(force).setStartValue(-25).start();
}

Там мыможно увидеть, что переменная anim определена в одной строке, а экземпляр переменной создан в следующей строке.Иногда я также вижу такой подход в некоторых проектах с открытым исходным кодом.

Есть ли реальная выгода от использования этого подхода или это просто вопрос стиля или читабельности?Или, в случае слайдов, это вопрос подгонки ширины слайда?Но если бы это было так, они могли бы написать что-то вроде:

SpringAnimation anim = new SpringAnimation(
        child, DynamicAnimation.ROTATION);

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Это только кодовые рекомендации, которым следует разработчик.Как и в Android-студии (см. Скриншот), справа на экране есть тонкая вертикальная линия, в этом случае длина нашего кода не должна превышать эту строку, поэтому, если она превышает, мы пишем следующую строку,

Как и на скриншоте, я добавил OnNavigationItemSelectedListener на следующей строке. Несмотря на то, что это не обязательно, рекомендуется следовать этой рекомендации.

Вы можете обратиться к рекомендациям по коду по следующей ссылке:

https://blog.mindorks.com/android-code-style-and-guidelines-d5f80453d5c7

codeline

0 голосов
/ 02 марта 2019

Хотя у каждого есть хорошая точка зрения на удобочитаемость и хороший стандарт кодирования, приведенный пример показывает, что есть некоторые объекты, которые имеют обязательные и необязательные поля.

Приведенный выше код можно легко объединить в одно и то же "строка ", как это:

Obj o = new Obj([mandatory args])
  .optionalParam1(...)
  .optionalParam2(...);

Но решено отделить обязательное от необязательного, чтобы оно было более читабельным и хорошо организованным (или, по крайней мере, так я думаю).

Они имеютДоказано, что это не имеет значения, потому что код в конце один и тот же, поэтому мы сами решаем, какие методы работают для вас, а какие нет (мне нравится комментировать мой код, так что легче вернуться, но я делаю это только в своих личных проектах, потому что моя рабочая команда не считает это ценным, если код чистый и не требует пояснений).

Оба ответа от @ Turing85 и @Kavita_p хороши и содержат достаточно контекстаи информация для вас!

0 голосов
/ 02 марта 2019

Давайте проведем небольшой эксперимент.Учитывая следующие два класса:

public class Test {
  public static void main(String... args) {
    Integer i = Integer.valueOf(1);
    System.out.println(i);
  }
}

public class Test2 {
  public static void main(String... args) {
    Integer i;
    i = Integer.valueOf(1);
    System.out.println(i);
  }
}

, мы можем взглянуть на сгенерированный байт-код:

> javac *.java && javap -c *.class
Compiled from "Test.java"
public class Test {
  public Test();
  Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String...);
  Code:
       0: iconst_1
       1: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
       8: aload_1
       9: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      12: return
}
Compiled from "Test2.java"
public class Test2 {
  public Test2();
  Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String...);
  Code:
       0: iconst_1
       1: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
       8: aload_1
       9: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      12: return
}

Поскольку сгенерированный байт-код идентичен, это вопрос того, что вы предпочитаете.

...