2016-05-11 4 views
3

Пример:Как назвать переменные с единицами?

public class Person { 
    private String name; 

    public String getName(){ 
     return name; 
    } 
} 

Это привело бы к чему-то вроде String name = person.getName();
Это прямо вперед, и я знаю, какой переменной это.

Но что:

public class MovingObject{ 
    private int mass; 

    public int getMass(){ 
     return mass; 
    } 
} 

Это приводит к int massOfMovingobject = object.getMass();

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

+0

У вас есть много разных единиц в вашей программе? Если они являются фундаментальными типами, вы даже можете создать для них структуру (например, 'DateTime' /' TimeSpan', но теперь для 'Mass' /' Velocity'). Затем они всегда находятся в базовом блоке (например, кг). – Caramiriel

+0

Это не столько количество единиц, сколько то, где я их использую. Мне нужен простой способ узнать, что это за единица. – SklogW

ответ

2

Это лучше НЕ использовать единицы в именах переменных, если они не используются для преобразования.

В качестве ориентира:

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

Так что в вашем случае MovingObject должен использовать систему единиц по умолчанию, а когда вам нужно отобразить ее в элементе управления графическим интерфейсом, вы можете сказать, например.

SomeGuiControl.Value = UnitConverter.Kilo2Pounds(object.getMass()); 
+2

Это лучшее решение для предотвращения путаницы, иначе позже вы могли бы попытаться вспомнить, была ли масса, с которой вы сейчас работаете, в фунтах или KG – Draken

2

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

public class MovingObject{ 
    private int mass; //in KG 

    public int getMassinKG(){ 
     return mass; 
    } 
    public int getMassinPound(){ 
     //do the calculation 
    } 
} 
+1

Мне очень нравится этот. Спасибо – SklogW

0

Вы можете вернуть массив вместо целочисленного значения. Ваш массив будет что-то вроде:

public HashMap getMass() 
{ 
    Map<String, String> map = new HashMap<int, String>(); 
    map.put("mass", mass); 
    map.put("unit", unit); 
    return map; 
} 
1

Другой метод, чтобы расширить предложение Pooya, в если вы хотите сохранить метод именования те же, но использовать параметры для изменения типа:

public class MovingObject{ 
    private int mass; //in KG 
    private MassType defaultType; 

    public int getMass(){ 
     return getMass(defaultType); 
    } 
    public int getMass(MassType type){ 
     switch(type){ 
      case Pound: 
       //Do calc 
       break; 
      default: 
       return mass; 
     } 
    } 
} 

public enum MassType{ 
    KG, 
    Pound 
} 
0

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

, расширяя один шаг дальше, мы могли бы рассмотреть импульс и скорость и создать объект Ньютона.

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

public class MovingObject{ 
    private double mass; //in KG 
    private double velocity; //in KG 
    public MovingObject(){ 
     this.mass = 0; 
     this.velocity = 0; 
    } 
    public double getMassinKG(){ 
     double mass = this.mass; 
     return mass; 
    } 
    public double getVelocityKG(){ 
     double velocity = this.velocity; 
     return velocity; 
    } 
    public void setMassinKG(double s){ 
     this.mass=s; 
    } 
    public void setVelocityKG(double s){ 
     this.velocity=s; 
    } 
    public String momentum(){ 
     return(String(this.mass*this.velocity)+"kg m/s"); 
    } 
    public String massInPounds(){ 
     return(String(this.mass*2.20462)+"pounds"); 
    } 
    public String massInKilograms(){ 
     return(String(this.mass)+"kilograms"); 
    } 
    public String velocityInMetersPerSecond(){ 
     return(String(this.velocity)+"meters per second"); 
    } 
    public String velocityInFeetPerSecond(){ 
     return(String(this.velocity*3.2808)+"feet per second"); 
    } 
} 

Обратите внимание на пару вещей здесь. Сначала методы с именем получают возвращаемые данные, хранящиеся как члены класса.Также сеттеры представляют собой пустоты, которые принимают обновленные значения элементов в качестве аргументов. Наконец, методы для отформатированных выходов можно назвать так, как вам кажется.

Happy Programming:)