---
# System prepended metadata

title: Guideline de programação C# Unity -  Baziyo Level Maker

---

# Guideline de programação C# Unity -  Baziyo Level Maker


## Softwares Utilizados

-  <img src="https://i.imgur.com/WQDm8RZ.png" alt="drawing" width="25"/>&nbsp;&nbsp; Rider 2021.1.2

-  <img src="https://i.imgur.com/BXHlVDj.png" alt="drawing" width="25"/>&nbsp;&nbsp; Unity 2019.4.2f1 

## Pacotes utilizados

No projeto tivemos a adição do package `2D Tilemap Extras` trazendo a Rule Tile para o projeto, essencial para a construção da fase.



## Guidelines

Para o projeto utilizamos a “C# Coding Conventions” disponibilizada pela própria Microsoft, as guidelines da própria Unity  e o guia da raywenderlich que resume os dois em uma guideline que visa um código conciso, limpo e fácil de ler.


## Nomenclaturas

### Pascal Case
 No código utilizamos PascalCase para Namespaces, Classe e Métodos, múltiplas palavras concatenadas conjuntamente, sem hífen ou underline, tendo como exceção a regra acrônimos como GUI ou HUD que podem ser em caixa alta. 


###### `example`
``` C#
public struct ValueCoordinate { }

public record PhysicalAddress(
    string Street,
    string City,
    string StateOrProvince,
    string ZipCode);

public class DataService
```

 Interfaces também utilizam a Pascal Case, mas devem ser acompanhadas do prefixo I para indifcar que é uma interface (ex : public interface IWorkerQueue ).


### Camel Case
A CamelCase é utilizada em todos os parâmetros e campos não estáticos de classes (o que inclui os campos públicos por convenção da Unity).
###### `example`
``` C#
public class MyClass
{
    public int publicField;
    int packagePrivate;
    private int myPrivate;
    protected int myProtected;
}
```

> -> Campos estáticos são a exceção e devem ser escritos em PascalCase
> ``` public static int ThatStaticVar; ```







## Declarações

### Campos e Variáveis
Ao declarar variáveis, declarações devem ser feitas linha a linha e não compactadas em uma linha só:
	Evitar :
```C#
  string username, twitterHandle;
```

Usar : 
		
```C#
string username;
string twitterHandle;
```


### Classes
 É recomendado que haja apenas uma classe em cada script, salvas excessões.
Interfaces
Todas as interfaces devem ser prefixidas com I :
```C#
(RadialSlider -> IRadialSlider)
```
## Espaçamento
 
### Identação
Utilizamos o tab (equivalente a 4 espaços) para identar o código.



### Quebra de linha
Identações de quebras de linha devem utilizar apenas um tab e não dois.
###### `example`
```C#
Evitar :
 CoolUiWidget widget =
        someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);

Utilizar :
CoolUiWidget widget =
    someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);
```
	
### Linhas
Linhas não devem ter mais de 100 caracteres

### Espaçamento vertical
Métodos e funcionalidades diferentes dentro do mesmo método devem ser separados por 1 linha em branco. (Se um metódo tiver muitas funcionalidades diferentes, geralmente isso indica que novos métodos devem ser criados).

## Colchete
Seguindo a convenção das guidelines de C# cada colchete deve ter sua própria linha como no exemplo abaixo:
###### `example:` 
```C#
void DoSomething()
    {
        if (someTest)
        {
          // ...
        }
    }
```

Mesmo argumentos condicionais que só utilizam uma devem utilizar colchetes para melhorar a sua visibilidade e seu entendimento
###### `example:` 
```C#
if (bool) ChangeSomething( );

if (bool) 
{
    ChangeSomething( );
}
```




## Switch

 Por padrão o switch deve acompanhar um default case, mas caso ele não seja atingido ou não seja necessário ele deve ser removido.

## Idioma
O código deve ser escrito e comentado em Inglês americano.
