SlideShare uma empresa Scribd logo
1 de 47
Giovanni Bassi
giovanni@lambda3.com.br
blog.lambda3.com.br
@giovannibassi
@GiovanniBassi

                 3
http://bit.ly/coffeescript-site

• Sintaxe mínima

• Semântica limpada

• Brinquedos novos

• É Javascript!
Morte “var”!
   a=1

   b = "nome"

   funcaoAlias = alert
Parênteses são opcionais!
   alert "I knew it!"

   res = somar 4, 5
Interpolação de strings (finally!)
   nome = "Giovanni"

   sobrenome = "Bassi"

   puts "meu nome é #{nome} #{sobrenome}."

   puts "meu nome tem #{nome.length} letras."
Limpando a cerimônia do Javascript
nas declarações de funções
   var soma = function soma(x, y) {
        return x + y;
   }

   Chamando:
   var res = soma(4, 5)
Limpando a cerimônia do Javascript
nas declarações de funções
   soma = (x, y) ->
       x+y
                          significant white space
   Chamando:
   res = soma 4, 5
Limpando a cerimônia do Javascript
nas declarações de funções
   Soma = (x, y) -> x + y

   Chamando:
   res = soma 4, 5
Declarar objetos ficou muito fácil
 pessoa = nome: "Giovanni"

 Ou...

 pessoa = nome: "Giovanni", sobrenome: "Bassi"

 Ou...

 pessoa =
        {
               nome: "Giovanni"
               sobrenome: "Bassi"
               nomeCompleto: ->
                      "#{@nome} #{@sobrenome}"
         }
Foreach (finally!)

   certificacoes = ["PSM I", "PSM II", "PSD", "PSPO"]
   for c in certificacoes
           puts c
While e Until

   balas = 100
   shoot = -> puts "shot ##{101 - balas}"; balas--

   until balas is 0 then shoot()

   while balas isnt 0 then shoot()
Palavrinhas chaves bonitas
is      ===
isnt    !==
on      true
yes     true
off     false
no      false
until   while not
Prefix ou postfix
   if engine is on
          drive car

   Ou...

   if engine is on then drive car

   Ou...

   drive car if engine is on
Prefix ou postfix
   if engine isnt on
          drive car

   Ou...

   drive car unless engine is on
Prefix ou postfix
   if verify and x > y
           bigger = yes

   bigger = yes if verify and x > y
Prefix ou postfix
   certificacoes = ["PSM I", "PSM II", "PSD", "PSPO"]
   for c in certificacoes
           puts c

   Ou...

   puts c for c in certificacoes
Tudo é são expressões
   puts (i for i in [1,2,3])

   puts (
   try
     naoexiste.algo
   catch
     “não existe”
   )

   nums = while num -= 1 then "num: #{num}"
Splats (ou params ou ParamArray)
certificacoes = ["PSM I", "PSM II", "PSD", "PSPO"]

verificaCerts = (cert1, cert2, outras...) ->
       puts "A primeira eh #{cert1}"
       puts "A segunda eh #{cert2}"
       puts "E tenho outras: #{outras}"

verificaCerts "PSM I", "PSM II", "PSD", "PSPO"
verificaCerts certificacoes...
Verificando existência
 pessoa =
        {
               nome: "Giovanni",
               sobrenome: "Bassi"
               pai: { nome: "o cara" }
        }

 ancestral = pessoa.mae ? pessoa.pai
 puts ancestral.nome

 puts pessoa.pai.nome
 puts pessoa.mae.nome #erro
 puts pessoa.mae?.nome #ok
Verificando existência
 pessoa =
        {
               nome: "Giovanni",
               sobrenome: "Bassi"
               pai: { nome: "o cara" }
        }

 ancestral = pessoa.mae ? pessoa.pai
 puts ancestral.nome

 puts pessoa.pai.nome
 puts pessoa.mae.nome #erro
 puts pessoa.mae?.nome #ok
O problema do “this”
• “this” varia do contexto de chamada

• Isso vai falhar se for feito dentro de um objeto:
$('.shopping_cart').bind('click', function (event) {
    this.loja.darDesconto(this.pedido);
});

• Não com CoffeeScript:
$('.shopping_cart').bind 'click', (event) =>
  @loja.darDesconto @pedido
Classes!!!
 class Person
        constructor: (@name, @age) ->
        Who: () ->
              "This is #{@name} and he is #{@age}
 years old"
 person = new Person "Giovanni", 33
 puts person.name
 puts person.Who()
Métodos estáticos em classes
class Person
       constructor: (@name, @age) ->
       @familia: -> "Bassi"
       Who: () ->
             "This is #{@name}"

puts Person.familia() #: Bassi
Herança
class SerVivo
       TemCarbono: () -> true
class Animal extends SerVivo
       Locomove: () -> "como?"
class Passaro extends Animal
       Locomove: () ->
             "#{super()} voa"

puts (new Passaro()).Locomove()
puts (new SerVivo()).TemCarbono()
CoffeeScript direto na página
 <script type="text/coffeescript">
        alert i for i in 1..10
 </script>
 <script src="coffee-script.js"></script>
CoffeeScript com jQuery
$ ->
       facaIsso(a, b)
       facaAquilo()
Compilando
• Compilando on demand diretório “coffee” para
  “js”:
       coffee -o scripts/js/ -c scripts/coffee/

• Observando mudanças e compilando
  automaticamente:
      coffee -w -c arquivo.coffee
CoffeeScript.org
CoffeeScript.org
Como?
Como?

        (versão 0.4.11)
Como?
Como?
Como?




http://bit.ly/coffeescriptwindows
Como?
Como?




 CoffeeScriptRunnerVSPackage
Como?
Como?
A linguagem CoffeeScript
CoffeeScript + VS + ASP.NET MVC
@giovannibassi
giovanni@lambda3.com.br

Mais conteúdo relacionado

Destaque

Antimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdrAntimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdr
Del Del
 

Destaque (15)

Bm 300 manual
Bm 300 manualBm 300 manual
Bm 300 manual
 
Recent UX Success
Recent UX SuccessRecent UX Success
Recent UX Success
 
Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016
 
Unit207 slideshare cheryl_cripps_18.03.16
Unit207 slideshare cheryl_cripps_18.03.16Unit207 slideshare cheryl_cripps_18.03.16
Unit207 slideshare cheryl_cripps_18.03.16
 
Building Blocks of Angular 2 and ASP.NET Core
Building Blocks of Angular 2 and ASP.NET CoreBuilding Blocks of Angular 2 and ASP.NET Core
Building Blocks of Angular 2 and ASP.NET Core
 
Asp.net Mvc 5 y Azure
Asp.net Mvc 5 y AzureAsp.net Mvc 5 y Azure
Asp.net Mvc 5 y Azure
 
Introduction to Asp.net 3.5 using VS 2008
Introduction to Asp.net 3.5 using VS 2008Introduction to Asp.net 3.5 using VS 2008
Introduction to Asp.net 3.5 using VS 2008
 
Learn ASP
Learn ASPLearn ASP
Learn ASP
 
Biografy designer grafis
Biografy designer grafisBiografy designer grafis
Biografy designer grafis
 
Module 4: Introduction to ASP.NET 3.5 (PowerPoint Slides)
Module 4: Introduction to ASP.NET 3.5 (PowerPoint Slides)Module 4: Introduction to ASP.NET 3.5 (PowerPoint Slides)
Module 4: Introduction to ASP.NET 3.5 (PowerPoint Slides)
 
Antimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdrAntimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdr
 
Real-time ASP.NET with SignalR
Real-time ASP.NET with SignalRReal-time ASP.NET with SignalR
Real-time ASP.NET with SignalR
 
work and energy
work and energy work and energy
work and energy
 
Arduino Workshop Day 2
Arduino  Workshop Day 2Arduino  Workshop Day 2
Arduino Workshop Day 2
 
Ova001 Mixología Básica
Ova001 Mixología BásicaOva001 Mixología Básica
Ova001 Mixología Básica
 

Mais de Giovanni Bassi

Mais de Giovanni Bassi (20)

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
 
Sendo ágil com git
Sendo ágil com gitSendo ágil com git
Sendo ágil com git
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
 
O Futuro do C#: C#8
O Futuro do C#: C#8O Futuro do C#: C#8
O Futuro do C#: C#8
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windows
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET Core
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
 

Último

Último (8)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

CoffeeScript com Visual Studio e ASP.NET MVC