9.5. Reducir el desorden

En un libro como éste, la simplicidad y brevedad de poner definiciones inline dentro de las clases es muy útil porque permite meter más en una página o pantalla (en un seminario). Sin embargo, Dan Saks [67] ha apuntado que en un proyecto real esto tiene como consecuencia el desorden de la interfaz de la clase y eso hace que la clase sea más incomoda de usar. Él se refiere a los métodos definidos dentro de las clases usando la expresión in situ (en el lugar) e indica que todas las definiciones deberían colocarse fuera de la clase manteniendo la interfaz limpia. La optimización, argumenta él, es una asunto distinto. Si se requiere optimizar, use la palabra reservada inline. Siguiente ese enfoque, el ejemplo anterior Rectangle.cpp quedaría:

//: C09:Noinsitu.cpp
// Removing in situ functions

class Rectangle {
  int width, height;
public:
  Rectangle(int w = 0, int h = 0);
  int getWidth() const;
  void setWidth(int w);
  int getHeight() const;
  void setHeight(int h);
};

inline Rectangle::Rectangle(int w, int h)
  : width(w), height(h) {}

inline int Rectangle::getWidth() const {
  return width;
}

inline void Rectangle::setWidth(int w) {
  width = w;
}

inline int Rectangle::getHeight() const {
  return height;
}

inline void Rectangle::setHeight(int h) {
  height = h;
}

int main() {
  Rectangle r(19, 47);
  // Transpose width & height:
  int iHeight = r.getHeight();
  r.setHeight(r.getWidth());
  r.setWidth(iHeight);
} ///:~

Listado 9.15. C09/Noinsitu.cpp


Ahora si quiere comparar el efecto de la funciones inline con la versión convencional, simplemente borre la palabra inline. (Las funciones inline normalmente deberían aparecen en los ficheros de cabecera, no obstante, las funciones no-inline deberían residir en un propia unidad de traducción). Si quiere poner las funciones en la documentación, es tan simple como un «copiar y pegar». Las funciones in situ requieren más trabajo y tienen más posibilidades de provocar errores. Otro argumento para esta propuesta es que siempre puede producir un estilo de formato consistente para las definiciones de función, algo que no siempre ocurre con las funciones in situ.



[67] Co-autor junto a Tom Plum de C++ Programming Guidelines, Plum Hall, 1991.