ugrás a tartalomhoz

Érdekes gondolkodásmód

csabessz47 · 2016. Ápr. 20. (Sze), 15.58
Sziasztok,

Most próbálták nekem megmagyarázni, hogy a következő kódrészlet milyen hasznos, mert hogy ilyenkor a callback üres function lesz és nem fog meghalni az a kód, ami utána használná.

var send = function (url, data, callback) {
  callback = callback || function () {};  // Ez az egy sor az igazán lényeges
  $.ajax({
    ...
    'beforeSend': function () {
      callback(SEND_BEFORE);
    },
    .
    .
    .
  });
};
Szerintem normális ember reflexből arra következtetne, hogy a callback egy boolean lesz, nem önmagára értékelődik ki, ezért én nagyívben kerülném a használatát az ilyen szép kis vagy feltételeknek.

Nektek mi a véleményetek erről?
Főleg hogy a leendő meggyőző PHP-ban is használja :)
 
1

Nincs vele gond.

T.G · 2016. Ápr. 20. (Sze), 16.29
Szerintem nincs vele gond. Nem egy best practices-ben is szerepel:
https://www.thinkful.com/learn/javascript-best-practices-1/#Use-Shortcut-Notations
2

Számomra egyértelmű ennek a

Endyl · 2016. Ápr. 20. (Sze), 16.37
Számomra egyértelmű ennek a szintaktikája, de lehet, hogy csak a megszokás miatt.

Ugyanakkor az MDN-es referencia legelején leírják ezt a működést, úgyhogy aki veszi a JS megtanulásának fáradtságát, az hamar találkozik vele (és nem is a JS az egyetlen nyelv, amiben így működnek a logikai operátorok).

Továbbá amíg nem lehet(ett) megadni alapértelmezett értéket paramétereknek, addig ez (volt) a hasonló funkcionalitás elérésének legtömörebb módja.

Én személy szerint kifejezőnek tartom, de megállapodás kérdése, hogy adott projektben/csapatban elfogadott-e az ilyen nyelvi "apróságok" használata.
3

|| és &&

Poetro · 2016. Ápr. 20. (Sze), 18.00
JavaScript-ben a || és && nem boolean értéket adnak vissza, ugyan logikai operátorok.
A && operátor az első hamisra kiértéklődő operandust adja vissza, vagy az utolsót.
(0 && 1) === 0
(1 && 0) === 0
(2 && 1) === 1
Az || operátor pedig az első igazra kiértékelődő operandust adja vissza, vagy az utolsót.
(0 || 1) === 1
(1 || 0) === 1
(2 || 1) === 2
4

Elég elfogadott és ismert

bamegakapa · 2016. Ápr. 21. (Cs), 11.37
Elég elfogadott és ismert megoldás ez a Javascript világában, szerintem használd nyugodtan.

Írhatod helyette ezt is (csak hát a felesleges ismétlés):

callback = callback ? callback : function () {};
vagy vizsgálgathatod az értéket minden egyes meghívás előtt, de szerintem még mindig a vaggyal jársz a legjobban (paraméterek esetén persze használhatod az említett default paraméterértéket helyette). Számomra jól olvasható, kimondva is jól illeszkedik a logikámba.
5

Ma is tanultam

csabessz47 · 2016. Ápr. 21. (Cs), 12.47
Köszönöm, akkor úgy tűnik, én vagyok elmaradott, nem gondoltam volna, hogy ez ennyire elterjedt :)
6

Ez ilyen :)

janoo · 2016. Ápr. 22. (P), 11.18
Ez a szintaktika teljesen elfogadott, van hogy 3 vagy akár 5-6 lehetőséget is felsorolnak.
Sokkal szebb lesz így a kódod :)

Viszont ennél a funkciónál semmi értelme a callback-et ellenőrizned, és üres funkcióval pótolnod, mert a jQuery is ellenőrzi, és természetesen csak akkor hívja meg, ha van.
A jQuery 2.2.2-nek a 8641. sorában találod az if(s.beforeSend && ...