Underscore: Ошибка ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ массивов для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ массивами

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 20 ΠΌΠ°Ρ€. 2016  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: jashkenas/underscore

Ошибка ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ массивов для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ массивами, Ρ‡Ρ‚ΠΎ отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ массивов.

_().pop(); // error
_('').pop(); // error
_().first() // undefined

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ массивы ΠΊ массиву?

_('hello').first() // 'h'
_('hello').pop() // ?

ВсС 6 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ массивы ΠΊ массиву?

_('hello').first() // 'h'
_('hello').pop() // ?

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, это всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° - ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΉ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ наша вСрсия 1.8.3 t0 стала 1.9.0.

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ исправлСно Π² 1.9.1, Ссли Π΄Π°, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ?

Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ всС Π΅Ρ‰Π΅ присутствуСт Π² 1.10.2.

НСмного Π±ΠΎΠ»Π΅Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ контраст Π² ΠΌΠΎΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния Π½Π° мСстС:

Object.assign(undefined, {a: 1})  // error
_().extend({a: 1})  // undefined

Array.prototype.push.call(undefined, 1)  // error
_().push(1)  // error

Π― нСсколько согласСн, Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ситуации с этим ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ ΠΈ Ρ‡Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΎΡ‚ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’ сСрСдинС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдсказуСм. НапримСр, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся Π² push , Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Array , Π»ΠΈΠ±ΠΎ undefined . По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ я Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Array Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Π­Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ.

_.chain(something).map(f).push(x)  // hoping to push x to an array

Если прСдсказанный ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π° Π½Π΅ массивом, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это ошибка программиста. Π― Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² этом случаС.

_.chain(something).map(f).join('').push(x)  // hoping to push x to a string??

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ история ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Π½ΠΎ я ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρƒ программиста Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ something Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° измСняСмый массив, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ push :

function giveMeAMutableArraylike(something) {
    _.chain(something).push(x)
}

ОТиданиС, Ρ‡Ρ‚ΠΎ something являСтся измСняСмым массивом, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ†Π΅Π»ΠΎΠΌΡƒ ряду ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

  1. giveMeAMutableArraylike #$ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ уравняли с null ΠΈΠ»ΠΈ undefined . Π­Ρ‚ΠΎ сравнимо с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ посСрСдинС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ нуля.
  2. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚ пытаСтся Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ giveMeAMutableArraylike ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ явно Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚. Π΅. Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚. Π­Ρ‚ΠΎ сравнимо со Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ посСрСдинС. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
  3. something β€” это Π³ΠΎΠ»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вмСсто массива с ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом, Ρ‚. Π΅ v вмСсто [v] . Π­Ρ‚ΠΎ обычная ситуация Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… API JavaScript. Если ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ giveMeAMutableArraylike допускаСт это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ v .

Π’ послСднСм случаС Underscore Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π»ΠΈ giveMeAMutableArraylike ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ Π³ΠΎΠ»Ρ‹Π΅ элСмСнты ΠΈΠ»ΠΈ Π½Π΅Ρ‚, поэтому программист giveMeAMutableArraylike Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚. НСт Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Ρ€ΠΎΠ΄Π΅ Underscore ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²:

| Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ | ΠžΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ одноэлСмСнтным массивом
---|---|---
ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ позволяСт Π³ΠΎΠ»Ρ‹ΠΉ ΠΎΠ΄ΠΈΠ½ элСмСнт | _ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ_ | ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ автоматичСски
ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π΅ позволяСт ΠΎΠ³ΠΎΠ»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ элСмСнт | ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ автоматичСски | _ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ_

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅, слСдуСт Π»ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅? НСкоторыС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π½Π΅ являСтся Array , Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ arguments ΠΈ простыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ такая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΊΠ°ΠΊ Underscore, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ экзотичСскиС ситуации, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ массивам, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ строки, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Array . НСвозмоТно ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ наимСньшСго измСнСния просто Π½Π΅Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Π·Π° счСт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈΡΡŒ. БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ вСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всС ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ СдинствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Underscore, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ каТСтся ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹ΠΌ Π²ΠΎ всСх мыслимых ситуациях, ΠΈ ΠΎΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ согласуСтся с ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ _.extend . НулСвая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ исправлСниСм ошибки, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ большСго быстро ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π΅Π΅ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ критичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

@jashkenas , Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΡ€ΠΎΠ»ΠΈΡ‚ΡŒ свСт Π½Π° это? Если Π²Ρ‹ согласны, я ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»ΡŽ ΠΏΡƒΠ»Π»-рСквСст, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π½ΡƒΠ»ΡŒ.

@jgonggrijp β€” ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ-Π΄Π²ΡƒΡ… прСдлоТСниях Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ нуля?

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ массива Π±ΡƒΠ΄ΡƒΡ‚ явно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ значСния? Или Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ noop ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ значСния?

@jashkenas Π”Π°. ПовСдСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π», являСтся Π½Π΅ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, слСдуя ΡΡ‚ΠΈΠ»ΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ массива подчСркивания:

https://github.com/jashkenas/underscore/blob/4cf715f593805ba8d7c5685cd06c82b3cd9b55ae/modules/index.js#L495

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° length Π½Π΅ потрСбуСтся, поэтому я просто Π²ΡΡ‚Π°Π²Π»ΡŽ

if (obj == null) return chainresult(this, obj);

ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя строками:

https://github.com/jashkenas/underscore/blob/4cf715f593805ba8d7c5685cd06c82b3cd9b55ae/modules/index.js#L1654 -L1655

Плюс тСсты, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈ Ссли эти тСсты выявят Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° null, которая ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² no-op ΠΏΠ΅Ρ€Π΅Π΄ этой строкой:

https://github.com/jashkenas/underscore/blob/4cf715f593805ba8d7c5685cd06c82b3cd9b55ae/modules/index.js#L1665

Π—Π²ΡƒΡ‡ΠΈΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ для мСня!

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ