Zmiana kodu biorąc pod uwagę zastosowanie domknięć.

Zmiana kodu biorąc pod uwagę zastosowanie domknięć.
KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 257
0

Witajcie,

Prosty kod licznika

Kopiuj

function makeCounter() {
    var count = 0;

   function counter () {
   count = count + 1;
   return count;
  }
  return counter;

}

należy teraz zmodyfikować. Funkcja makeCounter nie pobiera żadnych argumentów, lecz definiuje zmienną count. Następnie tworzy i zwraca obiekt udostępniający jedną metodę. increment. Ta metoda inkrementuje wartość zmiennej count, a następnie ją zwraca.

Nie wiem jak się do tego zabrać. Jak wykonać to polecenie? Temat dotyczy domykania.

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5023
0

Nie weim jakie Chcesz zachowanie funkcji, ale w pseudokodzie (Python), można zrobić tak:

Kopiuj
def makeCounter():
	count = [0]
	def increment(n):
		count[0] += n
		return count[0]
	return increment

def makeCounter1():
	count = 0
	def increment(n):
		return count + 1
	return increment

counter = makeCounter()

counter(1)

Pierwsza wersja "pamięta" swoje wywołania(closure) - zwraca ich liczbę, ale nie ma znaczenia od czego się ją wywoła. Druga wersja tylko inkrementuje argument i też go zwraca.

  • Rejestracja: dni
  • Ostatnio: dni
0

Nie umiem JS:

Kopiuj
function makeCounter() {
    let count = 0
    return { increment: () => ++count }
}

const counter = makeCounter()
console.log(counter.increment())
console.log(counter.increment())
console.log(counter.increment())

W Pythonie:

Kopiuj
>>> def make_counter():
...     count = 0
...     class Counter:
...         def increment(self):
...             nonlocal count
...             count += 1
...             return count
...     return Counter()
... 
>>> counter = make_counter()
>>> counter.increment()
1
>>> counter.increment()
2
>>> counter.increment()
3
>>> 
czubeka2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
0
Kopiuj
function makeCounter() {
  let value = 0;
  
  return {
    increment: () => {
      return ++value;
    },
    getValue: () => {
      return value;
    }
  }
}

const counter = makeCounter();

console.log(counter.getValue());
console.log(counter.increment());
console.log(counter.increment());
console.log(counter.increment());

Zwracamy obiekt który posiada dwie metody "getValue()" oraz "increment", zmieniają one wartość w ramach domknięcia funkcji "makeCounter".

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 257
0

Okazuje się, że odpowiedź wyglądała tak:

Kopiuj

function makeCounter() {
var count = 0;
return  {
   increment: function () {
       count++;
       return count:

Czy tutaj ta zmienna var count=0 jest nazwana niezależną dlatego, że jest poza funkcją function()?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.