May. 7th, 2015

madbernard: a long angled pier (Default)
There I was on Eloquent Javascript's problem 5.4, http://eloquentjavascript.net/05_higher_order.html#h_jr7hZiuR7+

The for loop seemed simple, but what I came up with wasn't processing "isNaN" as a function.

var every = function (array, compare) {
for (var i = 0; i < array.length; i++) {
if (array.i !== compare)
return false;
else return true;
}
};

console.log(every([NaN, NaN, NaN], isNaN));
// → should be true, but was showing as false
console.log(every([NaN, NaN, 4], isNaN));
// → false


Putting the "compare" in the if condition in () parentheses (because I had a memory that some form of parentheses would make javascript try to find the value of a thing... Thinking about this, that was probably a memory from getting values of keys, done with [], which in this case I believe would flag "compare" as an array) didn't fix it. Trying for != to allow for type conversion didn't fix it.

I looked at the hints, and they didn't talk about making functions do their thing; they talked about setting up the loop like "forEach". I took an abortive stab at redoing the loop to use forEach... This didn't run, and the linter in JSBin was sad about my use of break. (I'm still not sure what's up with break.)

function every (array) {
array.forEach(function(compare) {
if (array !== compare) {
break;
}
else return true;
});
return false;
}


I tabbed over to the annotated book: https://docs.google.com/document/d/1aa2-HtUglQrAps31s4LdTPVsiFb1BxhyjZolxeezzcI/edit?_escaped_fragment_=#!
Predicate functions were never defined in the book so I’ll quickly explain them here.

A predicate function is a function that returns true or false based on some condition. In this problem, we’re using isNaN(testValue), which returns true if testValue is NaN (remember this means not a number), and false otherwise.

Huh. At first that seemed a bit unfair, a new unexplained type of function. But then, a closer reading would have indicated that the compare thing had to be a function; and I'd even previously went back to the appearance of isNaN in Eloquent Javascript and managed to whizz past the part where it was summoned into action like so, isNan("some thing").

The working answer,
var every = function (array, compare) {
for (var i = 0; i < array.length; i++) {
if (!compare(array[i]))
return false;
}
return true;
};

And "some" is trivial from there.
madbernard: a long angled pier (Default)
People on Amazon and elsewhere seem to agree that they do not grok the Table example, so I was curious to get to it. I also don't read it on first pass. I didn't read the squirrel/phi example last chapter, though, either... This one doesn't seem deeper in the weeds than that, at first pass.

I don't understand polymorphism. Inheritance seems simple, but that may be because I vaguely remember that CodeAcademy Javascript, which I did a year ago, hit that hard. Polymorphism seems like it might be like cell biology... Like, many proteins have zinc fingers, structures that hold out a metal ion to interface with other proteins structures. When you see one, you have an idea what that protein/program is going to be up to. But that's just a guess.

Right now I don't understand something fundamental about wording in Javascript... Like, "line" seemed important in his example, but searching the page, it just suddenly appears in the TextCell constructor. I think it's drawing from the array/object inputs, but I need to track down how. For my own code I suspect I'll be doing a ton of veryLongWordyThingThatExplainsBetter, for awhile.

November 2022

S M T W T F S
  12345
6789101112
1314 1516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2025 01:56 am
Powered by Dreamwidth Studios