120 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Clean Code Guidelines
 | |
| ---
 | |
| 
 | |
| # Clean Code Guidelines
 | |
| 
 | |
| When coding, the coding style you follow can be really important. Specially when you are working with a team or you plan on sharing your 
 | |
| code.
 | |
| Most of these guidelines are standard and can be applied to most of the programming languages, however, here you have applications and 
 | |
| snippets with c++ code, so you can familiarize with it easier.
 | |
| Remember that these are only recommendations for achieving clarity, which can be a personal preference, so take these pieces of advice 
 | |
| into account but don't take them to the letter. Sometimes breaking some of these rules can lead to cleaner code.
 | |
| 
 | |
| ## Use good variable names and make comments
 | |
| 
 | |
| Make sure you create good variable names, for example, if you are creating a game, avoid using the variable "a" use something like "p1" referring to player 1. The [hungarian notation](https://en.wikipedia.org/wiki/Hungarian_notation) is commonly spread and can give you some guidelines for declaring variables.
 | |
| 
 | |
| Also, PLEASE, use comments, I'm not even kidding, just try to read some old projects you did without comments... now imagine being someone else who didn't even code it.
 | |
| 
 | |
| ## Global variables
 | |
| 
 | |
| Global variables can be easy to use, and with little code it might look like a great solution. But, when the code gets larger and larger, it becomes harder to know when are they being used.
 | |
| 
 | |
| Instead of using global variables you could use variables declared in functions which can help you telling what values are being passed 
 | |
| and identifying errors faster.
 | |
| 
 | |
| ```cpp
 | |
| #include <iostream>
 | |
| using namespace std;
 | |
| 
 | |
| // Global variables are declared outside functions
 | |
| int cucumber; // global variable "cucumber"
 | |
| ```
 | |
| 
 | |
| ## Using goto, continue, etc.
 | |
| 
 | |
| This is a usual discussion among programmers, just like global variables, these types of statements are usually considered bad practice.
 | |
| 
 | |
| They are considered bad because they lead to ["spaghetti code"](https://en.wikipedia.org/wiki/Spaghetti_code). When we program we want a
 | |
| linear flow, when using those statements the flow is modified and lead to a "twisted and tangled" flow.
 | |
| 
 | |
| Goto was used in the past when while, for, if functions, however, with the introduction of those structured programming was created.
 | |
| In general avoid using goto unless you are sure it will make your code cleaner and easier to read. An example might be using it in nested loops.
 | |
| 
 | |
| The usage of break and continue are practically the same. Use them in switches and try to make functions with an only purpose so you only have one exit point.
 | |
| 
 | |
| 
 | |
| 
 | |
| ## Avoid changing the control variable inside of a for loop
 | |
| 
 | |
| Usually there are works around this that look clearer and less confusing, eg. while loops.
 | |
| Do:
 | |
| ```cpp
 | |
| int i=1;
 | |
| while (i <= 5)
 | |
| {
 | |
|     if (i == 2)
 | |
|         i = 4;
 | |
| 
 | |
|     ++i;
 | |
| }
 | |
| ```
 | |
| 
 | |
| Instead of:
 | |
| ```cpp
 | |
| for (int i = 1; i <= 5; i++)
 | |
| {
 | |
|     if (i == 2)
 | |
|     {
 | |
|        i = 4;
 | |
|     }
 | |
|     // Do work
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Declare constants and types at the top
 | |
| 
 | |
| They are usually declared after libraries, this makes them be together and easier to read.
 | |
| 
 | |
| For local variables it happens the same, declare them at the top (Other people prefer it declaring them as later as possible in order to save memory see: [cplusplus.com](http://www.cplusplus.com/forum/general/33612/)
 | |
| 
 | |
| ## Use only one return function at the end
 | |
| 
 | |
| Just like we said before, we tend to make only one entry and exit to make the flow clearer.
 | |
| 
 | |
| ## Use curly braces even when writing one-liners
 | |
| 
 | |
| Making it systematically will help you doing it faster and in case you want to change the code in the future you will be able to do it without worries.
 | |
| 
 | |
| Instead of:
 | |
| ```cpp
 | |
| for (int i = 1; i <= 5; i++)
 | |
|     //CODE
 | |
| ```
 | |
| 
 | |
| Do:
 | |
| ```cpp
 | |
| for (int i = 1; i <= 5; i++)
 | |
| {
 | |
|     //CODE
 | |
| }
 | |
| ```
 | |
| ## Other recommendations
 | |
| 
 | |
| * #### Use for when you know the number of iterations, while and do while when you don't.
 | |
| 
 | |
| * #### Use const, pass by value/reference when suitable. This will help with saving memory.
 | |
| 
 | |
| * #### Use proper indentations, so that it is easy to read and debug the code, for you, as well as for others.
 | |
| 
 | |
| * #### Write const in caps, datatypes starting with T and variables in lower case.
 | |
| 
 | |
| 
 | |
| 
 | |
| ```cpp
 | |
| const int MAX= 100;             //Constant
 | |
| typedef int TVector[MAX];       //Data type
 | |
| TVector vector;                 //Vector
 | |
| ```
 |