-1

私はCoffeeScriptとJasmineの初心者です。最初に、私は以下のコードでテストに合格しようとしました:

class Counter
    count: 0

    constructor: ->
        @count = 0

    increment: ->
        @count++

    decrement: ->
        @count--

    reset: ->
        @count = 0

root = exports ? this
root.Counter = Counter

ジャスミンテストコードは以下のとおりです。

describe("Counter", ->
    counter = new Counter
    it("shold have 0 as a count variable at first", ->
        expect(counter.count).toBe(0)
    )

    describe('increment()', ->
        it("should count up from 0 to 1", ->
            expect(counter.increment()).toBe(1)
        )
    )
)

それから親切な人が私にコードは以下のようにすべきだと言いました:

class Counter
    count: 0

    constructor: ->
        @count = 0

    increment: ->
        ++@count

    decrement: ->
        --@count

    reset: ->
        @count = 0

root = exports ? this
root.Counter = Counter

はい、このコードはテストに合格しました。しかし、前者のコードは後者のコードよりも自然であるという疑問があります。この質問を特定する方法がわかりません。ご協力ありがとうございました。

4

2 に答える 2

2

これが、インクリメント前とインクリメント後の基本的な違いです。@count++の値を返し、@count後でインクリメントします。++@count最初にインクリメントし、新しい値を返します。これが、を使用した場合にテストが失敗する理由です@count++インクリメント演算子とデクリメント演算子の詳細。

于 2012-09-27T08:57:34.920 に答える
1

ポストインクリメントに固執することを選択した場合は、コードを次のように変更して、戻り値についてより明確にすることができます

class Counter
  count: 0

  constructor: ->
    @count = 0

  increment: ->
    @count++
    @count

  decrement: ->
    @count--
    @count
  reset: ->
    @count = 0

root = exports ? this
root.Counter = Counter

または、テストを次のように変更できます。

describe('increment()', ->
  it("should count up from 0 to 1", ->
    expect(counter.count).toBe(0)
    counter.increment()
    expect(counter.count).toBe(1)
  )
)

ただし、インクリメントとデクリメントの戻り値が@countの更新された値を反映することは期待できません。

違いを明らかにするための例を次に示し ます。http: //coffeescript.org/#try :class%20Counter%0A%20%20count%3A%200%0A%0A%20%20increment%3A%20- %3E%0A%20%20%20%20%40count%2B%2B%0A%20%20%20%20%40count%0A%20%20%0A%20%20inc%3A%20-%3E% 0A%20%20%20%20%40count%2B%2B%0A%0A%20%20decrement%3A%20-%3E%0A%20%20%20%20--%40count%0A%0A%20 %20dec%3A%20-%3E%0A%20%20%20%20%40count--%0A%0Acnt%20%3D%20new%20Counter%0Aalert%20cnt.increment()%0Aalert%20cnt.count% 0Aalert%20cnt.inc()%0Aalert%20cnt.count%0Aalert%20cnt.decrement()%0Aalert%20cnt.count%0Aalert%20cnt.dec()%0Aalert%20cnt.count

于 2012-09-27T13:24:04.253 に答える