Added new C++17 if features (#31413)

Added text about if with initializer and if constexpr
This commit is contained in:
alberto
2019-08-13 21:32:47 +02:00
committed by Randell Dawson
parent c06f25fb9d
commit d05d8b77ca

View File

@ -1,192 +1,210 @@
--- ---
title: If-Else Statement title: If-Else Statement
localeTitle: Declaración If-Else localeTitle: Declaración If-Else
--- ---
## ¿Qué hace una declaración If-Else? ## ¿Qué hace una declaración If-Else?
* La instrucción If-Else es una extensión de la instrucción simple If. * La instrucción If-Else es una extensión de la instrucción simple If.
* En la declaración simple If, si el valor de la expresión de prueba es falso, omitimos el código de bloqueo y continuamos con nuestra siguiente declaración. * En la declaración simple If, si el valor de la expresión de prueba es falso, omitimos el código de bloqueo y continuamos con nuestra siguiente declaración.
* Pero muchas veces, queremos ejecutar ciertos pasos si el valor de la expresión de prueba es falso. * Pero muchas veces, queremos ejecutar ciertos pasos si el valor de la expresión de prueba es falso.
* En tales casos, usamos la sentencia if-else. * En tales casos, usamos la sentencia if-else.
### Forma general de la declaración de If-Else ### Forma general de la declaración de If-Else
```cpp ```cpp
if (test expression) if (test expression)
{ {
//statements that run if the test expression is true //statements that run if the test expression is true
} }
else else
{ {
//statements that run if the test expression is false //statements that run if the test expression is false
} }
``` ```
### Ejemplo de declaración If-Else ### Ejemplo de declaración If-Else
Si la expresión de prueba es verdadera: Si la expresión de prueba es verdadera:
```cpp ```cpp
int a=10; int a=10;
if (a < 20) // This expression is true, so... if (a < 20) // This expression is true, so...
{ {
//...the code in this block gets executed, and... //...the code in this block gets executed, and...
} }
else else
{ {
//...the code in this block gets skipped. //...the code in this block gets skipped.
} }
//program continues //program continues
``` ```
Si la expresión de prueba es falsa: Si la expresión de prueba es falsa:
```cpp ```cpp
int a=10; int a=10;
if (a>20) // This expression is false, so this time... if (a>20) // This expression is false, so this time...
{ {
//...this code gets skipped... //...this code gets skipped...
} }
else else
{ {
//...and this code executes instead. //...and this code executes instead.
} }
//program continues //program continues
``` ```
### Ejemplo en C ++: ### Ejemplo en C ++:
```cpp ```cpp
//Program to check whether number entered by user is positive or negative //Program to check whether number entered by user is positive or negative
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int no; int no;
cout << "Enter a number: " << endl; cout << "Enter a number: " << endl;
cin >> no; cin >> no;
// condition to check if number is positive or negative // condition to check if number is positive or negative
if (no >= 0) // positive if (no >= 0) // positive
{ {
// block if value is true // block if value is true
cout << "You entered a positive number: " << no << endl; cout << "You entered a positive number: " << no << endl;
} }
else // negative else // negative
{ {
// block if value is false // block if value is false
cout << "You entered a negative number: " << no << endl; cout << "You entered a negative number: " << no << endl;
} }
// program continues // program continues
cout << "This step is always printed" << endl; cout << "This step is always printed" << endl;
return 0; return 0;
} }
``` ```
#### Salida #### Salida
* Cuando se ingresa un número positivo: * Cuando se ingresa un número positivo:
``` ```
Enter a number: Enter a number:
4 4
You entered a positive number: 4 You entered a positive number: 4
This step is always printed This step is always printed
``` ```
* Cuando se ingresa un número negativo: * Cuando se ingresa un número negativo:
``` ```
Enter a number: Enter a number:
-200 -200
You entered a negative number: -200 You entered a negative number: -200
This step is always printed This step is always printed
``` ```
[Prueba el código tu mismo](https://repl.it/MzBq) [Prueba el código tu mismo](https://repl.it/MzBq)
# **No dude en preguntar cualquier duda en la página de GitHub de [FreeCodeCamp](https://forum.freecodecamp.org/) o en [el foro de FreeCodeCamp.](https://forum.freecodecamp.org/)** # **No dude en preguntar cualquier duda en la página de GitHub de [FreeCodeCamp](https://forum.freecodecamp.org/) o en [el foro de FreeCodeCamp.](https://forum.freecodecamp.org/)**
[Prueba el código tu mismo](https://repl.it/MzBq) [Prueba el código tu mismo](https://repl.it/MzBq)
### Uso de if ... else if ... else ladder ### Uso de if ... else if ... else ladder
Si tenemos que tomar decisiones basadas en más de una condición utilizando, en caso contrario. Usamos otra cosa si la condición es la siguiente: Si tenemos que tomar decisiones basadas en más de una condición utilizando, en caso contrario. Usamos otra cosa si la condición es la siguiente:
```cpp ```cpp
#include<iostream> #include<iostream>
int main() int main()
{ {
int score; int score;
std::cout<<"Enter your score: \n"; std::cout<<"Enter your score: \n";
std::cin>>score; std::cin>>score;
if(score>=90) if(score>=90)
std::cout<<"Top performance."; std::cout<<"Top performance.";
else if(score<90 && score>=70) else if(score<90 && score>=70)
std::cout<<"Good performance"; std::cout<<"Good performance";
else if(score<70 && score>=45) else if(score<70 && score>=45)
std::cout<<"Average performance"; std::cout<<"Average performance";
else if(score<45 && score>=30) else if(score<45 && score>=30)
std::cout<<"You can improve it."; std::cout<<"You can improve it.";
return 0; return 0;
} }
``` ```
#### Salida #### Salida
``` ```
Enter your score: Enter your score:
85 85
Good performance Good performance
``` ```
### Otro ejemplo de si ... else if ... else ladder ### Otro ejemplo de si ... else if ... else ladder
Supongamos que el usuario ingresa dos números y los vamos a mostrar si alguno de los números es mayor que el otro. Y si ninguno es mayor que el otro, imprimimos la declaración "Ambos son iguales". Supongamos que el usuario ingresa dos números y los vamos a mostrar si alguno de los números es mayor que el otro. Y si ninguno es mayor que el otro, imprimimos la declaración "Ambos son iguales".
En este scinerio necesitaremos una sentencia de escalera si ... o si ... y si no. El programa se verá así: En este scinerio necesitaremos una sentencia de escalera si ... o si ... y si no. El programa se verá así:
``` ```
#include<iostream> #include<iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int number1,number2; int number1,number2;
cout << "Enter first number: \n"; cout << "Enter first number: \n";
cin >> number1; cin >> number1;
cout << "Enter second number: \n"; cout << "Enter second number: \n";
cin >> number2; cin >> number2;
if(number1 > number2) // Checks if the first number is greater than the second number if(number1 > number2) // Checks if the first number is greater than the second number
{ {
cout << "Number 1 is greater."; cout << "Number 1 is greater.";
} }
else if(number2 > number1) // Checks if the second number is greater than the first number else if(number2 > number1) // Checks if the second number is greater than the first number
{ {
cout << "Number 2 is greater."; cout << "Number 2 is greater.";
} }
else // If both of the above cases return false, then both numbers are equal else // If both of the above cases return false, then both numbers are equal
{ {
cout << "Both the numbers are equal."; cout << "Both the numbers are equal.";
} }
return 0; return 0;
} }
``` ```
#### Salida #### Salida
``` ```
Enter first number: Enter first number:
85 85
Enter second number: Enter second number:
86 86
Number 2 is greater. Number 2 is greater.
``` ```
* Tenga en cuenta que el programa solo verificará la condición 'else if' cuando la condición inicial 'if' no se cumpla. Y si no se cumple ninguna de estas condiciones, se ejecuta el último bloque 'else' que imprime la declaración: "Ambos números son iguales". * Tenga en cuenta que el programa solo verificará la condición 'else if' cuando la condición inicial 'if' no se cumpla. Y si no se cumple ninguna de estas condiciones, se ejecuta el último bloque 'else' que imprime la declaración: "Ambos números son iguales".
* El tamaño de la escalera if ... else if ... else puede variar según el problema que el programa esté tratando de resolver y la cantidad de condiciones que deben verificarse. * El tamaño de la escalera if ... else if ... else puede variar según el problema que el programa esté tratando de resolver y la cantidad de condiciones que deben verificarse.
**Buena suerte a todos ustedes** ### Adiciones a if en las nuevas versiones de C++
A partir de C++17 es posible añadir una instrucción de inicialización al if, algo parecido a un bucle for.
**¡Feliz codificación! :)** ```
if(int status = getStatus(); status < 0) {
std::cerr << "Error " << status << '\n';
}
```
Como puedes ver permite usar variables en el if y su bloque sin tener que estar declaradas fuera de este. Es muy útil en apis que retornan códigos de error, como se ve en el ejemplo.
También en C++ 17 se añadio if constexpr, un if diseñado para ser resuelto en tiempo de compilación, por ejemplo si una clase es hija de otra.
```
if constexpr (std::is_base_of<Base, Hija>::value) {
...
}
```
**Buena suerte a todos ustedes**
**¡Feliz codificación! :)**
**No dude en hacer cualquier consulta en la página de GitHub de freeCodeCamp.org o en [el foro de freeCodeCamp.org](https://forum.freecodecamp.org/)** .