SlideShare a Scribd company logo
1 of 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

More Related Content

Viewers also liked

Recent UX Success
Recent UX SuccessRecent UX Success
Recent UX SuccessLou Susi
 
Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016BJPLC
 
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.16Cheryl Cripps
 
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 CoreLevi Fuller
 
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 2008maddinapudi
 
Biografy designer grafis
Biografy designer grafisBiografy designer grafis
Biografy designer grafissigitartstudio
 
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)Mohamed Saleh
 
Antimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdrAntimicrobial stewardship(asp)and mdr
Antimicrobial stewardship(asp)and mdrDel Del
 
work and energy
work and energy work and energy
work and energy Rks Ptl
 
Ova001 Mixología Básica
Ova001 Mixología BásicaOva001 Mixología Básica
Ova001 Mixología BásicaJuanmendozaa
 

Viewers also liked (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
 

More from Giovanni Bassi

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çosGiovanni Bassi
 
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 .NETGiovanni Bassi
 
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 agoraGiovanni Bassi
 
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 kubernetesGiovanni Bassi
 
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.1Giovanni Bassi
 
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# 8Giovanni Bassi
 
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 deployGiovanni Bassi
 
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êineresGiovanni Bassi
 
.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 2Giovanni Bassi
 
.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 LinuxGiovanni Bassi
 
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 agoraGiovanni Bassi
 
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.jsGiovanni Bassi
 
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.jsGiovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windowsGiovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET CoreGiovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com dockerGiovanni Bassi
 
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...Giovanni Bassi
 

More from 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...
 

CoffeeScript com Visual Studio e ASP.NET MVC