Refactoring JavaScript by Evan Burchard
Author:Evan Burchard
Language: eng
Format: epub, mobi, pdf
Publisher: O'Reilly Media
Published: 2017-03-28T04:00:00+00:00
this.labelProbabilities.forEach((_probabilities, difficulty) => { ... const totalLikelihood = chords.reduce((total, chord) => {
The parts with => are what make them arrow functions. The syntax might seem a little weird (and it has a lot of variation), but what’s great is the this passes through from the outer function.
To simplify this function a bit further, smoothing can be taken out of the function and added as a new attribute of the classifier:
smoothing: 1.01, classify: function(chords){ const classified = new Map(); this.labelProbabilities.forEach((_probabilities, difficulty) => { const totalLikelihood = chords.reduce((total, chord) => { const probabilityOfChordInLabel = this.probabilityOfChordsInLabels.get(difficulty)[chord]; if(probabilityOfChordInLabel){ return total * (probabilityOfChordInLabel + this.smoothing); }else{ return total; } }, this.labelProbabilities.get(difficulty) + this.smoothing); classified.set(difficulty, totalLikelihood); }); return classified; }
On the one hand, this is nice because it gets smoothing out of our function. However, it does increase the scope of where it is available and necessitates adding this. to precede it inside of the function. Extracting this const to an attribute also makes it assignable again. Unfortunately, getting something like a const inside of our classifier object literal takes a bit of work. There is a defineProperty function that we can use to define attributes that are not only not writable, but even immutable by default. We won’t go into depth here, but defineProperty is a good tool to look into if you want a lot of control over how properties are used.
Normally, defineProperty would be called after the object is created, which would add complexity to our execution at some point, and move the attribute’s creation to some other physical place in the file. On the other hand, we could just call this inside of the classify function like this:
Download
Refactoring JavaScript by Evan Burchard.mobi
Refactoring JavaScript by Evan Burchard.pdf
This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately.
Hello! Python by Anthony Briggs(9913)
The Mikado Method by Ola Ellnestam Daniel Brolund(9777)
Dependency Injection in .NET by Mark Seemann(9337)
Sass and Compass in Action by Wynn Netherland Nathan Weizenbaum Chris Eppstein Brandon Mathis(7778)
The Well-Grounded Java Developer by Benjamin J. Evans Martijn Verburg(7557)
Svelte with Test-Driven Development by Daniel Irvine(7137)
Test-Driven Development with PHP 8 by Rainier Sarabia(6864)
Layered Design for Ruby on Rails Applications by Dementyev Vladimir;(6731)
Secrets of the JavaScript Ninja by John Resig & Bear Bibeault(6532)
Secrets of the JavaScript Ninja by John Resig Bear Bibeault(6413)
Web Development with Django by Ben Shaw Saurabh Badhwar(6199)
React Application Architecture for Production by Alan Alickovic(5923)
Jquery UI in Action : Master the concepts Of Jquery UI: A Step By Step Approach by ANMOL GOYAL(5806)
Kotlin in Action by Dmitry Jemerov(5062)
Audition by Ryu Murakami(4583)
Software Architecture for Web Developers by Mihaela Roxana Ghidersa(4440)
Hands-On Full-Stack Web Development with GraphQL and React by Sebastian Grebe(4316)
Accelerating Server-Side Development with Fastify by Manuel Spigolon Maksim Sinik & Matteo Collina(4286)
Functional Programming in JavaScript by Mantyla Dan(4038)
