SlideShare uma empresa Scribd logo
CoffeeScript com Visual Studio e ASP.NET MVC
Giovanni Bassi
giovanni@lambda3.com.br
blog.lambda3.com.br
@giovannibassi
@GiovanniBassi

                 3
CoffeeScript com Visual Studio e ASP.NET MVC
CoffeeScript com Visual Studio e ASP.NET MVC
CoffeeScript com Visual Studio e ASP.NET MVC
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
CoffeeScript com Visual Studio e ASP.NET MVC
@giovannibassi
giovanni@lambda3.com.br

Mais conteúdo relacionado

Destaque (15)

Bm 300 manual
Bm 300 manual
leena leena
 
Recent UX Success
Recent UX Success
Lou Susi
 
Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016
BJPLC
 
Unit207 slideshare cheryl_cripps_18.03.16
Unit207 slideshare cheryl_cripps_18.03.16
Cheryl Cripps
 
Building Blocks of Angular 2 and ASP.NET Core
Building Blocks of Angular 2 and ASP.NET Core
Levi Fuller
 
Asp.net Mvc 5 y Azure
Asp.net Mvc 5 y Azure
Germán Küber
 
Introduction to Asp.net 3.5 using VS 2008
Introduction to Asp.net 3.5 using VS 2008
maddinapudi
 
Learn ASP
Learn ASP
gurchet
 
Biografy designer grafis
Biografy designer grafis
sigitartstudio
 
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 mdr
Del Del
 
Real-time ASP.NET with SignalR
Real-time ASP.NET with SignalR
Alexander Konduforov
 
work and energy
work and energy
Rks Ptl
 
Arduino Workshop Day 2
Arduino Workshop Day 2
Yogendra Tamang
 
Ova001 Mixología Básica
Ova001 Mixología Básica
Juanmendozaa
 
Recent UX Success
Recent UX Success
Lou Susi
 
Ievadprezentacija, Latvijas vecāku forums 2016
Ievadprezentacija, Latvijas vecāku forums 2016
BJPLC
 
Unit207 slideshare cheryl_cripps_18.03.16
Unit207 slideshare cheryl_cripps_18.03.16
Cheryl Cripps
 
Building Blocks of Angular 2 and ASP.NET Core
Building Blocks of Angular 2 and ASP.NET Core
Levi Fuller
 
Introduction to Asp.net 3.5 using VS 2008
Introduction to Asp.net 3.5 using VS 2008
maddinapudi
 
Biografy designer grafis
Biografy designer grafis
sigitartstudio
 
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 mdr
Del Del
 
work and energy
work and energy
Rks Ptl
 
Ova001 Mixología Básica
Ova001 Mixología Básica
Juanmendozaa
 

Semelhante a CoffeeScript com Visual Studio e ASP.NET MVC (20)

Introdução à MEAN Stack
Introdução à MEAN Stack
Bruno Catão
 
JavaScript "for dummies"
JavaScript "for dummies"
Murilo Beltrame
 
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
RicardoKratz2
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
Wesley Lemos
 
Introdução ao JavaScript
Introdução ao JavaScript
Carlos Roberto Gomes Junior
 
Introdução a JavaScript
Introdução a JavaScript
Bruno Catão
 
WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011
Leonardo Balter
 
Apostila de ext js com php e postgresql v0.5
Apostila de ext js com php e postgresql v0.5
Luciano Marwell
 
Javascript
Javascript
Fernando Simeone
 
Introdução ao JS1.pptx
Introdução ao JS1.pptx
LuanDev1
 
04_Introducao_JavaScript.pdf
04_Introducao_JavaScript.pdf
DaniloPereira341965
 
Realtime com node.js e socket.io
Realtime com node.js e socket.io
Caio Ribeiro Pereira
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
Harlley Oliveira
 
Crash Course Ruby & Rails
Crash Course Ruby & Rails
Frevo on Rails
 
Aula javascript
Aula javascript
Gabriel Moura
 
Apostila de ext js com php e postgresql v1.0
Apostila de ext js com php e postgresql v1.0
Luciano Marwell
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
Lucas Caton
 
Apostila de ext js com php e postgresql v1.2
Apostila de ext js com php e postgresql v1.2
Luciano Marwell
 
Apostila de ext js com php e postgresql v1.1
Apostila de ext js com php e postgresql v1.1
Luciano Marwell
 
Apostila de ext js com php e postgresql v1.3
Apostila de ext js com php e postgresql v1.3
Luciano Marwell
 
Introdução à MEAN Stack
Introdução à MEAN Stack
Bruno Catão
 
JavaScript "for dummies"
JavaScript "for dummies"
Murilo Beltrame
 
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
RicardoKratz2
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
Wesley Lemos
 
Introdução a JavaScript
Introdução a JavaScript
Bruno Catão
 
WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011
Leonardo Balter
 
Apostila de ext js com php e postgresql v0.5
Apostila de ext js com php e postgresql v0.5
Luciano Marwell
 
Introdução ao JS1.pptx
Introdução ao JS1.pptx
LuanDev1
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
Harlley Oliveira
 
Crash Course Ruby & Rails
Crash Course Ruby & Rails
Frevo on Rails
 
Apostila de ext js com php e postgresql v1.0
Apostila de ext js com php e postgresql v1.0
Luciano Marwell
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
Lucas Caton
 
Apostila de ext js com php e postgresql v1.2
Apostila de ext js com php e postgresql v1.2
Luciano Marwell
 
Apostila de ext js com php e postgresql v1.1
Apostila de ext js com php e postgresql v1.1
Luciano Marwell
 
Apostila de ext js com php e postgresql v1.3
Apostila de ext js com php e postgresql v1.3
Luciano Marwell
 
Anúncio

Mais de Giovanni Bassi (20)

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
Giovanni Bassi
 
Sendo ágil com git
Sendo ágil com git
Giovanni Bassi
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
Giovanni Bassi
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
Giovanni 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.1
Giovanni Bassi
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
Giovanni Bassi
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
Giovanni Bassi
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
Giovanni Bassi
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
Giovanni Bassi
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
Giovanni Bassi
 
O Futuro do C#: C#8
O Futuro do C#: C#8
Giovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windows
Giovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET Core
Giovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com docker
Giovanni 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...
Giovanni Bassi
 
O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
Giovanni Bassi
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
Giovanni 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.1
Giovanni Bassi
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
Giovanni Bassi
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
Giovanni Bassi
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
Giovanni Bassi
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
Giovanni Bassi
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
Giovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windows
Giovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET Core
Giovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com docker
Giovanni 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...
Giovanni Bassi
 
Anúncio

Último (13)

G.6 Avarias Mais Comuns em Computadores TIC2.pptx
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
vieirapatricio94
 
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
jarlisonsantos1985
 
Breve Histórico do Computador [2 de 2].pdf
Breve Histórico do Computador [2 de 2].pdf
jarlisonsantos1985
 
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
ssuser1712ed
 
Capítulo 7 - Redes de computadores multimídia.ppt
Capítulo 7 - Redes de computadores multimídia.ppt
ssuser0a4331
 
Certified SAFe 6 Lean Portfolio Manager
Certified SAFe 6 Lean Portfolio Manager
Adail Viana Neto
 
Certified SAFe 6 Agilist
Certified SAFe 6 Agilist
Adail Viana Neto
 
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
destruidorschirmer
 
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
ssuser0a4331
 
Como Criar uma Partição Bootável no HD Interno.pptx
Como Criar uma Partição Bootável no HD Interno.pptx
vieirapatricio94
 
modelo apresentação power point de TCC para se inspirar
modelo apresentação power point de TCC para se inspirar
marianaabelhao2024
 
POAN-1 trabalho de antena de microfita.pptx
POAN-1 trabalho de antena de microfita.pptx
joaquimpaulo2306
 
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
destruidorschirmer
 
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
vieirapatricio94
 
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
jarlisonsantos1985
 
Breve Histórico do Computador [2 de 2].pdf
Breve Histórico do Computador [2 de 2].pdf
jarlisonsantos1985
 
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
ssuser1712ed
 
Capítulo 7 - Redes de computadores multimídia.ppt
Capítulo 7 - Redes de computadores multimídia.ppt
ssuser0a4331
 
Certified SAFe 6 Lean Portfolio Manager
Certified SAFe 6 Lean Portfolio Manager
Adail Viana Neto
 
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
destruidorschirmer
 
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
ssuser0a4331
 
Como Criar uma Partição Bootável no HD Interno.pptx
Como Criar uma Partição Bootável no HD Interno.pptx
vieirapatricio94
 
modelo apresentação power point de TCC para se inspirar
modelo apresentação power point de TCC para se inspirar
marianaabelhao2024
 
POAN-1 trabalho de antena de microfita.pptx
POAN-1 trabalho de antena de microfita.pptx
joaquimpaulo2306
 
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
destruidorschirmer
 

CoffeeScript com Visual Studio e ASP.NET MVC