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

PDF
shell bash Fpar aula6
PPTX
Asp.net orientation
PPT
asp .net training | asp.net course | asp.net training online | learn asp.net
PDF
Module 4: Introduction to ASP.NET 3.5 (Material)
PPTX
Asp.net Training at NCrypted Learning Center
PPT
Migrating To Visual Studio 2008 & .Net Framework 3.5
PDF
Capitulo3
PPTX
Amit K Sawant C.V. - Presentation
shell bash Fpar aula6
Asp.net orientation
asp .net training | asp.net course | asp.net training online | learn asp.net
Module 4: Introduction to ASP.NET 3.5 (Material)
Asp.net Training at NCrypted Learning Center
Migrating To Visual Studio 2008 & .Net Framework 3.5
Capitulo3
Amit K Sawant C.V. - Presentation

Destaque (15)

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

Mais de Giovanni Bassi (20)

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

Último (16)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
COBITxITIL-Entenda as diferença em uso governança TI
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Processos na gestão de transportes, TM100 Col18
Arquitetura de computadores - Memórias Secundárias
Custos e liquidação no SAP Transportation Management, TM130 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

CoffeeScript com Visual Studio e ASP.NET MVC