Una función identidad es una función que devuelve el mismo valor que recibe por parámetro.
int f(int x)
{
return x
}
En algunas circunstancias puede ser útil para mejorar la legibilidad del código, sobre todo si estamos haciendo refactoring y no pretendemos hacer grandes cambios.
Consideremos el siguiente caso. Imagina que tenemos una aplicación que realiza peticiones HTTP y mantiene estádisticas de número de peticiones satisfactorias, número de peticiones fallidas. En el código de test existe una función que se encarga de hacer esos chequeos:
inline void assert_http_statistics(HttpRequest& http_req, int num_success, int num_failures) {
EXPECT_EQ(http_req.get_num_success_requests(), num_success);
EXPECT_EQ(http_req.get_num_failures_request(), num_failures);
}
TEST(HttpRequestTest, check_http_requests_statistics) {
HttpRequest http_req;
//Success http request
http_req.get("https://hardfloat.es");
//Failed http request
http_req.get("https://dsugerreasadasc.io");
assert_http_statistics(http_req, 1, 1);
}
Al pasarle dos enteros a la función http_requests_statistics se pierde legibilidad porque es necesario consultar qué significan esos dos parámetros, si usamos funciones identidad veamos como queda.
int num_http_success_requests(int x) {
return x;
}
int num_http_failed_requests(int x) {
return x;
}
inline void assert_http_statistics(HttpRequest& http_req, int num_success, int num_failures) {
EXPECT_EQ(http_req.get_num_success_requests(), num_success);
EXPECT_EQ(http_req.get_num_failures_request(), num_failures);
}
TEST(HttpRequestTest, check_http_requests_statistics) {
HttpRequest http_req;
//Success http request
http_req.get("https://hardfloat.es");
//Failed http request
http_req.get("https://dsugerreasadasc.io");
assert_http_statistics(http_req,
num_http_success_requests(1),
num_http_failed_requests(1));
}
Esta es una forma rápida de mejorar la legibilidad del código que no nos cuesta nada y a la larga lo agradeceremos.