Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork927
Description
👋 hey, this is a great repo/cheatsheet, thanks for this!
A couple points on your get/set examples, in short, they are confusing when compared with each other and conflicts with OO principles.
"Accesses data immediately (i.e. shorthand getter of internal data)."
// GetfunctiongetFruitCount(){returnthis.fruits.length}
this suggests that getFruitCount is part of either a class or object, which has the propertyfruits with type array (or other iterable).
constbowl={fruits:['apple','orange','pear'],getFruitCount(){this.fruits.length},getfruitCount(){this.fruits.length}}
with the example above to get the number of fruits in the bowl, you can do eitherbowl.getFruitCount() orbowl.fruitCount. If you find you are using getFruitCount often in your code, or you are passing it into another function, it can get unreadable/extraneous quite quickly.
thrownewError(`Not enough${bowl.getFruitCount()}`);// vsthrownewError(`Not enough${bowl.fruitCount}`);
// Setletfruits=0functionsetFruits(nextFruits){fruits=nextFruits}setFruits(5)
I think this example should either match your get example, or be completely different so it's not confusing, since get/set on an object is thought of to be a matching pair. Currently, I don't see a "benefit" of using this set function over a simplefruits = randomNumber() orfruits = 5 especially with the current scoping. If you were to match the getter method (get keyword), the example would look like this.
constbowl={fruits:0,getfruitCount(){this.fruits},setfruitCount(val){if(typeofval==='number'){fruits=val}else{thrownewError('You need to provide a number');}}console.log(bowl.fruitCount)// 0;bowl.fruitCount=5;console.log(bowl.fruitCount)// 5;bowl.fruitCount= "invalid";// throws Error
the key words, in js and other languages usually allow for those sorts of protections against setting (and getting a private field without exposing the field's value directly).
To avoid this confusion, I think you should either explain getters/setters vs a function with get/set in the name and provide an example of both, or more simply, use a pure function as an example.
functiongetRandomFruit(){/* returns a fruit */}functionsetTheme(palette){/* changes UI theme to light | dark mode */}