Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik

Ich schreibe es so mit Python und Ruby, aber ich schreibe es so, wie ich es mir mit CoffeeScript vorstelle.

Kommentar

# comment
# comment
// comment
# comment

Kommentare, die mehrere Zeilen umfassen

Python hat keine mehrzeiligen Kommentare. Ersetzen Sie daher eine Zeichenfolge

'''
comment
'''

"""
comment
"""
=begin
comment
=end
/*
comment
*/
###
comment
###

Zeichen einbetten

>>> width = 100
>>> "{0}px".format(width)
"100px"
>>> "%dpx" % width
"100px"
width = 100
p "#{width}px"
# => 100px
width = 100;
console.log("" + width + "px");

Ähnlich wie Ruby

width = 100
console.log "#{width}px"
# 100px

Eine Zeichenfolge, die mehrere Zeilen umfasst

>>> a = '''a
... b'''
"a\nb"
a = 'a
b'
# => "a\nb"
a = 'a\
      b';
// "a\n     b"
a = 'a
b'
# "ab"

Assoziatives Array

d = {'a': 0, 'b': 2}
d = {:a => 0, :b => 2}
d = {a: 0, b: 2}
d = a: 0, b: 2
d = {a: 0, b: 2} #OK
#Wenn es mehrere Zeilen umfasst`,`Kann ausgelassen werden
d =
  a: 0  #Sie können auch Kommentare hinzufügen
  b: 2
d = {
  a: 0
  b: 2
}

Array

l = [1, 3, 5]
l = [1, 3, 5]
l = [1, 3, 5]
l = [1, 3, 5]
#Wenn es mehrere Zeilen umfasst`,`Kann ausgelassen werden
l = [
  1
  3
  5
]

Zusammenhängendes Array

>>> range(5)
[0, 1, 2, 3, 4]
>>> range(5, 0, -1)
[5, 4, 3, 2, 1]
>>> range(2, 5)
[2, 3, 4]
[0...5]
# [0, 1, 2, 3, 4]
[0..4]
# [0, 1, 2, 3, 4]

[4...-1]
# [4, 3, 2, 1, 0]
[4..0]
# [4, 3, 2, 1, 0]

[2...5]
# [2, 3, 4]
[2..4]
# [2, 3, 4]

Zugriff auf das Array

>>> l = range(10)
>>> l[1]
1
>>> l[2:4]
[2, 3]
>>> l[2:]
[2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:4]
[0, 1, 2, 3]
>>> l[::3]
[0, 3, 6, 9]
>>> l[-1]
9
>>> l[3:6] = [6, 8, 9]
>>> l
[0, 1, 2, 6, 8, 9, 6, 7, 8, 9]
l = [0...10]
l[1]
# 1
l[2...4]
# [2, 3]
l[2...]
# [2, 3, 4, 5, 6, 7, 8, 9]
l[...4]
# [0, 1, 2, 3]
i for i in l by 3
# [0, 3, 6, 9]
l[l.length-1]]
# 9
l[3...6] = [6, 8, 9]
# [0, 1, 2, 6, 8, 9, 6, 7, 8, 9]

Listeneinschlussnotation

Einfacher Fall

>>> l = ['a', 'b', 'c']
>>> [v for v in l]
['a', 'b', 'c']
>>> [(i, v) for i, v in enumerate(l)]
[(0, 'a'), (1, 'b'), (2, 'c')]
>>> d = {'a': 0, 'b': 1, 'c': 2}
>>> [k for k in d]
['a', 'b', 'c']
>>> [(k, v) for k, v in d.items()]
[('a', 0), ('b', 1), ('c', 2)]
l = ['a', 'b', 'c']
v for v in l
# ['a', 'b', 'c']
[v for v in l]
# [ ['a', 'b', 'c'] ]
[i, v] for i, v in l
# [[0, 'a'], [1, 'b'], [2, 'c']]
d = a: 0, b: 1, c: 2
k for k of d
# ['a', 'b', 'c']
[k, v] for k, v of d
# [['a', 0], ['b', 1], ['c', 2]]

Filtern mit Listeneinschlussnotation

>>> [i for i in range(10) if i % 3 == 0]
[0, 3, 6, 9]
i for i in [0...10] when i % 3 is 0
# [0, 3, 6, 9]

Die Notation zur Aufnahme von CoffeeScript-Listen kann vielfältiger sein

>>> for i in range(5)
...     print i
0
1
2
3
4
console.log i for i in [0...5]
# 0
# 1
# 2
# 3
# 4

Funktion

def func(arg, *args):
    pass
def func(arg, *args)
end
var func = function(arg) {
  var args = 2 <= arguments.length ? Array.prototype.slice.call(arguments, 1) : []
}
func = (arg, args...) ->

Funktionsaufruf

Python benötigt (), um die Funktion aufzurufen

>>> def foo(): return 'foo'
>>> foo
<function __main.foo>
>>> foo()
'foo'

Kein Ruby erforderlich

def foo
  'foo'
end
p foo
# => foo
def bar(x)
  x
end
p bar 'bar'
# => bar

Beim Erstellen einer Instanz ist kein JavaScript erforderlich. Erforderlich für normale Anrufe

var foo = function() {return 'foo'};
console.log(typeof foo);
// 'function'
console.log(foo());
// 'foo'
f = new foo;
console.log(f.construoctor === foo);
// true

CoffeeScript erfordert (), wenn kein Argument übergeben wird, nicht erforderlich, wenn ein Argument vorhanden ist

foo = -> 'foo'
console.log typeof foo
# 'function'
console.log foo()
# foo
bar = (x) -> x
console.log foo 'bar'
# bar

Funktionsrückgabewert

Python und JavaScript erfordern "return". Wenn nicht, wird für Python "None" und für JavaScript "undefined" zurückgegeben.

>>> def bar(): 'bar'
>>> bar() is None
True
var bar = function() { 'bar' };
console.log(bar === undefined);
// true

In Ruby und CoffeeScript lautet der letzte Satz "return".

def bar
  'bar'
end
bar
# => 'bar'
bar = -> 'bar'
bar()
# 'bar'

Klasse

>>> class Klass(object):
...     def __init__(self, name):
...         self.name = name
>>> k = Klass('hoge')
>>> k.name
"hoge"
class Klass
  attr "name"
  def initialize(name)
    @name = name
  end
end
k = Klass.new 'hoge'
p k.name
# => hoge
function Klass(name) {
  this.name = name;
}
var k = new Klass('hoge');
console.log(k.name);
// hoge
class Klass
  constructor: (name) ->
    @name = name
k = new Klass 'hoge'
console.log k.name
# hoge

Erbe

>>> class Parent(object):
...     def foo(self):
...         print 'parent'
>>> class Child(Parent):
...     def foo(self):
...         super(Child, self).foo()
...         print 'child'
>>> c = Child()
>>> c.foo()
parent
child
class Parent
  def foo
    p 'parent'
  end
end
class Child < Parent
  def foo
    super
    p 'child'
  end
end
c = Child.new
c.foo
# => parent
# => child
function Parent() {}
Parent.prototype.foo = function () { console.log('parent'); };
function Child() {}
Child.prototype = new Parent;
Child.prototype.foo = function () {
  Parent.prototype.foo.call(this);
  console.log('child');
}
var c = new Child;
c.foo();
// parent
// child
class Parent
  foo: ->
    console.log 'parent'
class Child extend 
  foo: ->
    super
    console.log 'child'
c = new Child
c.foo()
# parent
# child

Mixin

module Fooable
  def foo
    p 'foo'
  end
end
class Klass
  include Fooable
end
k = Klass.new
k.foo
# => 'foo
# https://gist.github.com/993415
class Mixin
  augment: (t) ->
    (t[n] = m unless n == 'augment' or !this[n].prototype?) for n, m of this
class Fooable extends Mixin
  foo: ->
    console.log 'foo'
class Klass
  constructor: ->
    Fooable::augment @
k = new Klass
k.foo()
# foo

Recommended Posts

Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Vergleich von Python und Ruby (Environment / Grammar / Literal Edition)
Versionsverwaltung von Node, Ruby und Python mit anyenv
Vergleich der grundlegenden Grammatik zwischen Java und Python
Scraping mit Node, Ruby und Python
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
Vergleich der Matrixtranspositionsgeschwindigkeit durch Python
Zusammenfassung der Korrespondenz zwischen Ruby- und Python-Array-Operationen
Sofortige Methodengrammatik für Python und Ruby (Lernen)
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Angeben des Bereichs von Ruby- und Python-Arrays
TRIE-Baumimplementierung mit Python und LOUDS
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Fortsetzung der Multi-Plattform-Entwicklung mit Electron und Python
Beispiel für das Lesen und Schreiben von CSV mit Python
Ruby, Python und Map
Python und Ruby teilen sich
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
Vergleichstabelle häufig verwendeter Prozesse von Python und Clojure
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python und Ruby Slice Memo
Python-Installation und grundlegende Grammatik
Zundokokiyoshi mit Python / Rubin / Lua
Ruby- und Python-Syntax ~ branch ~
Python mit Pyenv und Venv
Python 3 Sortier- und Vergleichsfunktionen
Vergleich von Apex und Lamvery
Quellinstallation und Installation von Python
Python (Python 3.7.7) Installation und grundlegende Grammatik
Funktioniert mit Python und R.
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Grundlegender Grammatikvergleich in fünf Sprachen (C #, Java, Python, Ruby, Kotlin)
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lernen Sie "Englische Grammatik" anstelle von Python- und AI-bezogenen englischen Wörtern. .. ..
Führen Sie mit Python und Matplotlib eine Isostromanalyse offener Wasserkanäle durch
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Zusammenfassung der Unterstützung von Hash-Operationen (Dictionary) für Ruby und Python
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Beispiel für das Parsen von HTTP GET und JSON mit Pfefferpython
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
AtCoder JSC2019 Qual B Gelöst von Ruby und Python