Wpis z mikrobloga

Jest sobie taki kod https://pastebin.com/yRMr6fBU (z 5 rozdziału Eloquent JavaScript), a tutaj array (w przykładzie jest przekonwertowany z JSONa pod zmienną ancestry)

I nie za bardzo ogarniam co jest zwracane tutaj

function sharedDNA(person, fromMother, fromFather) {
if (person.name == "Pauwels van Haverbeke")
return 1;
else
return (fromMother + fromFather) / 2;
}

To dalej leci do valueFor, i tam jest pobierana matka i ojciec. Tylko, że matka i ojciec to imię i nazwisko, więc nie rozumiem co tu jest dodawane i dzielone. Co zwraca ten return?

http://eloquentjavascript.net/05_higher_order.html w "Great-great-great-great-..."

#naukaprogramowania #javascript #eloquentjavascript
  • 4
@PolaroidalnY: Ten return zwraca 1 lub średnią jaką matka i ojciec obiektu person dzielą z panem Puawelsem ;)

reduceAncestors przy pomocy valueFor, dzięki rekurencji tworzy drzewo wywołań funkcji sharedDNA (dla każdej osoby spokrewnionej z osobą z wywołania valueFor(person) w reduceAncestors. Czyli:

sharedDNA(byName["Philibert Haverbeke"], sharedDNA(byName["Emma de Milliano"]....

Przy wykonywaniu ("zwijaniu drzewa") tych wywołań sharedDNA przekazuje "sam sobie" albo 1 albo tę średnią z poprzednich wywołań.
@kmiasko: Tylko byName[person.mother] to string. Więc jaki wynik jest zwracany po dodaniu stringów? Jesteś w stanie wytłumaczyć to łopatologicznie?
Bo to chyba leci tak (nie zwracaj uwagi na klamry itp. bo pogubiłem kopiując)

sharedDNA(person, valueFor("Emma de Milliano") {
if (person == null)
return defaultValue;
else
return sharedDNA(person, valueFor(itd. aż do null),
valueFor(byName[itd. aż do null));

if (person.name == "Pauwels van Haverbeke")
return 1;
else
return (fromMother + fromFather) / 2;}},

valueFor("Philibert