2015-02-28 3 views
0

Быстрый вопрос,булевы Лучшие практики в Java

это ...

this.setPregnant(isPregnant = true); 

... То же самое, как это?

this.setPregnant(true); 

Какой из них лучше практиковать?

@ScheduledMethod(start = 3) 
public void mate() { 
    if (this.isFemale == true) { 
     Context context = ContextUtils.getContext(this); 
     Geography<Agent> geography = (Geography)context.getProjection("Geography"); 
     Geometry geom = geography.getGeometry(this); 
     // get coordinates of the female 
     Coordinate femCoord = geom.getCoordinates()[0]; 
     List<Agent> males = new ArrayList<Agent>(); 
     //create an envelope around the female 
     Envelope envelope = new Envelope (femCoord.x + 0.9, femCoord.x - 0.9, femCoord.y + 0.9, femCoord.y - 0.9); 
     //get all the males around the female 
     for(Agent male: geography.getObjectsWithin(envelope, Agent.class)) { 
      if(male.isFemale != true) 
       //add them to a list 
       males.add(male); 
     } 

     //randomly choose one, set isPregnant to be true and move to his coordinates 
     int index = RandomHelper.nextIntFromTo(0, males.size() -1); 
     Agent mate = males.get(index); 
     Context matecontext = ContextUtils.getContext(mate); 
     Geography<Agent> mategeography = (Geography)matecontext.getProjection("Geography"); 
     Geometry mategeom = mategeography.getGeometry(mate); 
     Coordinate mate = mategeom.getCoordinates()[0]; 

     this.setPregnant(isPregnant = true); 
     // or this.setPregnant(true); 

     moveTowards(mate); 

     System.out.println("Female can now lay eggs..."); 

    } 
} 
+1

Не используйте вышеуказанный. Просто мнение. Гораздо менее читаемо. – Kon

+0

Нет, не зная, что делает setPregnant, они могут делать разные вещи. Первый присваивает true isPregnant, а затем передает это значение в метод, где второй просто передает true метод ... – MadProgrammer

+0

@MadProgrammer Все еще его назначение и операция смешивания. –

ответ

1

Никогда не видел такой синтаксис, как верхний для метода сеттера. Нижний - гораздо читабельнее и практичнее, поэтому избегайте другого.

+0

Синтаксис действителен, но считается плохой практикой. (потому что он выполняет назначение, а затем передает параметр методу setPregnant.) Плакат может ошибочно полагать, что java поддерживает именованные параметры (в ada вызов, такой как setPregnant (беременность => true, hasBeenConfirmedByTest => true), может улучшить читаемость. –

+0

Хорошо. Я просто никогда не учил или не знал о первой реализации. Также в первом случае, не будет ли это дважды устанавливать значение true? – btrballin

+0

@brtballin В java такая функция не существует в это текущее время (JDK8 является текущим поколением), хотя существует множество языков, поддерживающих именованные параметры (C#, ada, Object C ..) Если вы используете встроенное задание, то причина, по которой вы не видели его «в дикой природе», плохая практика, но ее законно иметь строку кода, такую ​​как «while ((a = myMethod (c, b))> 0)» –

5

Нет, его нет. они различны, Первый устанавливает логическое значение «isPregnant» в true, а затем передает его методу «setPregnant», и этот пример - ужасная ужасная практика.

(Большинство гидов фирменного стиля, как правило, имеют линию, которая гласит «Никогда не следует смешивать назначение и операции. Это делает код труднее читать.»)

Второй ясно (но не делает назначение) можно было бы предположить, что метод setPregnant выполняет задание еще раз (но не может быть уверен)

0

Если вы внутри класса, которые имеют атрибут isPregnant, вы можете просто присвоить атрибут непосредственно. Никакой вызов метода не требуется.

isPregnant = true; 
Смежные вопросы