Skip to content

Instantly share code, notes, and snippets.

@niftydevelopment
Created October 7, 2015 22:38
Show Gist options
  • Select an option

  • Save niftydevelopment/ddac7170f6ec69a3dfd6 to your computer and use it in GitHub Desktop.

Select an option

Save niftydevelopment/ddac7170f6ec69a3dfd6 to your computer and use it in GitHub Desktop.
Faltarende.getSenasteSammanstalltResultat = function() {
var latestDatum = -1;
var latestResult = null;
this.kontroller.forEach(function(kontroll) {
if (kontroll.getSenasteSammanstalltResultatByTyp) {
var senasteSammanstalldaForKontroll = kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE');
if (senasteSammanstalldaForKontroll && senasteSammanstalldaForKontroll.skapadDen > latestDatum) {
latestDatum = senasteSammanstalldaForKontroll.skapadDen;
latestResult = senasteSammanstalldaForKontroll;
}
}
});
return latestResult;
};
Faltarende.getSenasteSammanstalltResultat2 = function() {
return this.kontroller.filter(kontroll => {
return kontroll.getSenasteSammanstalltResultatByTyp &&
kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE');
}).map(kontroll => {
return kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE');
}).reduce((a, b) => {
if (a.skapadDen > b.skapadDen) {
return a;
} else {
return b;
}
});
};
@mlindsten

Copy link
Copy Markdown

Alternativ 2 är absolut snyggare, men jag tycker det är orättvist att tillskriva förbättringen till fat arrows. Jag vill påstå att det är ES5s array methods som står för denna!

Här har du exakt samma funktion, fast utan fat arrows:

Faltarende.getSenasteSammanstalltResultat3 = function() {

  return this.kontroller.filter(function(kontroll) {

      return kontroll.getSenasteSammanstalltResultatByTyp &&
        kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE');

    }).map(function(kontroll) {

      return kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE');

    }).reduce(function(a, b) {

      if (a.skapadDen > b.skapadDen) {
        return a;
      } else {
        return b;
      }

    });
};

Inte så stor skillnad om du frågar mig! Jag tycker nog till och med att läsbarheten är högre i ES5-varianten, dvs utan fat arrows. =P

Om du ska ge ett exempel på när fat arrows verkligen förenklar så borde du välja ett där den inre funktionen använder ett yttre kontext (implicit bind).

Vill man ändå skriva funktionen med fat arrows så skulle jag förenklat den ytterligare något (och skrivit den mer kompakt, men jag behåller din formatering för jämförelsens skull):

Faltarende.getSenasteSammanstalltResultat4 = function() {

  return this.kontroller.filter(kontroll =>

      kontroll.getSenasteSammanstalltResultatByTyp &&
        kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE')

    ).map(kontroll =>

      kontroll.getSenasteSammanstalltResultatByTyp('FALTARENDE')

    ).reduce((a, b) =>

      a.skapadDen > b.skapadDen ? a : b

    );
};

@niftydevelopment

Copy link
Copy Markdown
Author

"men jag tycker det är orättvist att tillskriva förbättringen till fat arrows. Jag vill påstå att det är ES5s array methods som står för denna!"

  • Självklart är det så :-)

"Inte så stor skillnad om du frågar mig! Jag tycker nog till och med att läsbarheten är högre i ES5-varianten, dvs utan fat arrows. =P"

  • De extra "function" i ES5 är nog lite mer en vanesak tror jag.Personligen tycker jag det tynger koden.

"Om du ska ge ett exempel på när fat arrows verkligen förenklar så borde du välja ett där den inre funktionen använder ett yttre kontext (implicit bind)."

  • ok, förlåt ;-)

"Vill man ändå skriva funktionen med fat arrows så skulle jag förenklat den ytterligare något (och skrivit den mer kompakt, men jag behåller din formatering för jämförelsens skull):"

  • Om man kan hävda att ES5:s functions ökar läsbarheten så vågar jag nog hävda att kompakt kod inte alltid är att föredra.
    Exempel: a.skapadDen > b.skapadDen ? a : b vs if.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment