# 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.