{"id":484,"date":"2017-04-11T14:26:26","date_gmt":"2017-04-11T17:26:26","guid":{"rendered":"http:\/\/gianfratti.com\/?p=484"},"modified":"2017-04-11T14:41:42","modified_gmt":"2017-04-11T17:41:42","slug":"c-syntactic-sugar","status":"publish","type":"post","link":"https:\/\/gianfratti.com\/index.php\/c-syntactic-sugar\/","title":{"rendered":"C# Syntactic Sugar"},"content":{"rendered":"<p>Ol\u00e1 pessoal, j\u00e1 ouviram falar de Syntactic Sugar ?<\/p>\n<p>Syntactic Sugar, tamb\u00e9m usado como Syntax Sugar, \u00e9 um termo utilizado para quando uma linguagem de programa\u00e7\u00e3o oferece uma forma mais f\u00e1cil de ser lida e escrita.<\/p>\n<p>Usar syntactic sugar refere-se a escrever um c\u00f3digo de forma alternativa ao modo tradicional, com a finalidade de escrever menos c\u00f3digo e torn\u00e1-lo mais expressivo.<\/p>\n<p>O que acontece \u00e9 que nem sempre conhecemos todos os modos de se escrever em uma linguagem e podemos nos deparar com um c\u00f3digo \u201cestranho\u201d.<\/p>\n<p>Vou abordar dois exemplos de Syntactic Sugar em C#.<!--more--><\/p>\n<p><strong>Primeiro exemplo:<\/strong><\/p>\n<p>O que est\u00e1 acontecendo aqui?<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nint? numero = null;\r\nnumero = 12;\r\n<\/pre>\n<p>Colocar um \u201c?\u201d no final de um tipo significa dizer que ele \u00e9 um \u201cNullable Type\u201d.<\/p>\n<p><em>Nullable Type s\u00e3o inst\u00e2ncias de System.Nullable&lt;T&gt; struct. Ou seja, um int por exemplo pode receber valores entre -2147483648 a 2147483647 mas nunca um \u201cnull\u201d, um int? al\u00e9m de receber valores entre -2147483648 a 2147483647 tamb\u00e9m pode receber \u201cnull\u201d.<\/em><\/p>\n<p>Em algum determinado momento sua vari\u00e1vel do tipo int poderia receber um dado nulo \u201cnull\u201d, por exemplo, ao receber valores de uma tabela de um banco de dados onde a coluna estivesse vazia \u201cnull\u201d.<\/p>\n<p>Se voc\u00ea fizer isso ter\u00e1 um erro:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nint numero = null;\r\nnumero = 12;\r\n\/\/Cannot convert null to 'int' because it is a non-nullable value type\r\n<\/pre>\n<p>Usar \u201c?\u201d para descrever um \u201cNullable Type\u201d \u00e9 uma forma reduzida, pois originalmente \u00e9 feito assim:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nSystem.Nullable&lt;int&gt; numero = null;\r\nnumero = 12;\r\n<\/pre>\n<p>Legal, agora j\u00e1 aprendemos o que \u00e9 um \u201cNullable Type\u201d e como declarar um tipo desse de forma reduzida.<\/p>\n<p><strong>Segundo exemplo:<\/strong><\/p>\n<p>O que est\u00e1 acontecendo aqui?<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring NomePrincipal = null;\r\nstring NomeAlternativo = &quot;Fabrizio&quot;;\r\n\r\nstring Nome = NomePrincipal ?? NomeAlternativo;\r\n<\/pre>\n<p>Afinal o que s\u00e3o estes dois pontos de interroga\u00e7\u00e3o? (??)<\/p>\n<p>O c\u00f3digo acima \u00e9 para testar se a vari\u00e1vel NomePrincipal n\u00e3o \u00e9 nula (null) e se caso for, ent\u00e3o atribuir a vari\u00e1vel NomeAlternativo para a vari\u00e1vel Nome.<\/p>\n<p>Este \u00e9 mais um exemplo de syntactic sugar no C#, menos c\u00f3digo escrito e mais simples de entender. O que est\u00e1 acontecendo no c\u00f3digo acima poderia ser escrito assim:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring NomePrincipal = null;\r\nstring NomeAlternativo = &quot;Fabrizio&quot;;\r\n\r\nstring Nome = NomePrincipal != null ? NomePrincipal : NomeAlternativo;\r\n<\/pre>\n<p>Agora deu para entender?<br \/>\nNo exemplo acima utilizamos um <a href=\"http:\/\/gianfratti.com\/index.php\/c-operadores-ternarios\/\">operador tern\u00e1rio<\/a>. O operador tern\u00e1rio j\u00e1 \u00e9 uma forma de escrever menos c\u00f3digo, por\u00e9m n\u00e3o \u00e9 syntactic sugar.<\/p>\n<p>Note que o primeiro exemplo de c\u00f3digo exibido n\u00e3o \u00e9 um operador tern\u00e1rio, apenas foi escrito de uma forma \u201cabreviada\u201d (isto \u00e9 syntactic sugar).<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring Nome = NomePrincipal ?? NomeAlternativo;\r\n<\/pre>\n<p>Note tamb\u00e9m que usar o \u201c??\u201d \u00e9 valido apenas para testar se um valor \u00e9 \u201cnull\u201d, n\u00e3o pode ser aplicado para outros tipos de valida\u00e7\u00f5es.<\/p>\n<p>Veja como ficaria se estiv\u00e9ssemos escrevendo da forma mais b\u00e1sica:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring NomePrincipal = null;\r\nstring NomeAlternativo = &quot;Fabrizio&quot;;\r\n\r\nstring Nome;\r\n\r\nif (NomePrincipal != null)\r\n{\r\nNome = NomePrincipal;\r\n}\r\nelse\r\n{\r\nNome = NomeAlternativo;\r\n}\r\n<\/pre>\n<p>Muito mais c\u00f3digo, maior o tempo para ler e compreender.<\/p>\n<p>Vamos aumentar as possibilidades? Veja s\u00f3:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring NomePrincipal = null;\r\nstring NomeAlternativo = null;\r\nstring NomeQualquer = null;\r\n\r\nstring Nome = NomePrincipal ?? NomeAlternativo ?? NomeQualquer ?? &quot;Sem Nome&quot;;\r\n\/\/ Resultado: Nome = &quot;Sem Nome&quot;\r\n<\/pre>\n<p>Podemos usar quantos \u201c??\u201d quisermos em nosso c\u00f3digo, experimente escrever isso da forma mais b\u00e1sica, seria chato n\u00e9?<\/p>\n<p>Usar os benef\u00edcios do syntactic sugar \u00e9 legal, facilita nosso entendimento ao ler e agiliza na hora de escrever reduzindo o tempo de codifica\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, j\u00e1 ouviram falar de Syntactic Sugar ? Syntactic Sugar, tamb\u00e9m usado como Syntax Sugar, \u00e9 um termo utilizado para quando uma linguagem de programa\u00e7\u00e3o oferece uma forma mais f\u00e1cil de ser lida e escrita. Usar syntactic sugar refere-se a escrever um c\u00f3digo de forma alternativa ao modo tradicional, com a finalidade de escrever <span class=\"ellipsis\">&hellip;<\/span> <span class=\"more-link-wrap\"><a href=\"https:\/\/gianfratti.com\/index.php\/c-syntactic-sugar\/\" class=\"more-link\"><span>Read More &rarr;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2,15],"tags":[],"class_list":["post-484","post","type-post","status-publish","format-standard","hentry","category-net-framework","category-back-end"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=484"}],"version-history":[{"count":4,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/484\/revisions"}],"predecessor-version":[{"id":488,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/484\/revisions\/488"}],"wp:attachment":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}