Az önce güzel geçen mülakatın sonunda sinirlerimi bozmuş olan mantık sorusudur. 1 saattir her soruyu cevapladım, en sonunda mal gibi kaldım.

Düşünüyorum ama aklıma bir şey gelmiyor.

Denildi ki, bir fonksiyon olacak ve içinde bir değişken tutulacak 0 diye.

Bu fonksiyon her çağırıldığında değeri 1 artırarak ekrana yazdırılacak.

Nasıl yaparız?

Yasaklar: Fonksiyon dışında değişken tutmak yasak, local storage, cache, database vs dışarıda bir değer tutmak yasak.

İç içe fonksiyon koyup değişkeni dıştakinde tutsam, içte hesaplama yaptırsam diyorum ama fonksiyon sıfırdan çağırılınca her türlü değer sıfırlanıyor.

Atladığım ve javascriptten faydalanamadığım ufak bit trick var gibi. Bunu yapıp anlatabilecek var mı?

Örn:

calisTurko(){
...
...
}

calisTurko() //1
calisTurko() //2
calisTurko() //3

Edit: Javascript sorusu. React/React Native mülakatıydı.

 

javascriptten emin degilim ama fonksiyonun icinde static variable tutabilirsin.
void calisTurko()
{
static int i = 0;
printf("%d\n", i++);
}
bu c++'ta istedigini yapmasi lazim.

jason cureklibatur

#include <stdio.h>

void foo()
{
int a = 10;
static int sa = 10;

a += 5;
sa += 5;

printf("a = %d, sa = %d\n", a, sa);
}


int main()
{
int i;

for (i = 0; i < 10; ++i)
foo();
}


This prints:

a = 15, sa = 15
a = 15, sa = 20
a = 15, sa = 25
a = 15, sa = 30
a = 15, sa = 35
a = 15, sa = 40
a = 15, sa = 45
a = 15, sa = 50
a = 15, sa = 55
a = 15, sa = 60

orpheus

evet hatırladım static tutulan değişkenler bellekte hep kalıyorlar ama soru aslına javascript sorusuydu ve eğer bir class yok ise static variable tanımlanmıyor diye biliyorum.

farklı bir yöntem lazım sanırım.

mesela benzer bir soru sorulmuş ama alttaki cevap yasaklar arasına girdiği için kabul edilmiyor: stackoverflow.com

ananiyimioguz

import React, { useState } from 'react';

function IncrementVariable() {
// Initialize a state variable named 'count', and a state setter function named 'setCount'
const [count, setCount] = useState(0);

return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}

export default IncrementVariable;

tahtakafa

closure'da tutmak yasak mı? değilse self executing function içinde tutarsın variable'i, sonra da başka fonksiyon dönersin. o fonksiyon o context'e erişebilir, başka bir yerden erişilemez.

a = (function() {var val = 0; return function() {return ++val}})()

a() // 1
a() // 2
....

satoshi nakamoto

Ic ice fonksiyon dogru cevap. Closure diye arayip bulabilirsiniz.

funtion getIncrementor() {
let counter = 0;
return function () {
return counter++;
}
}

const increment = getIncrementor();
console.log(increment());
console.log(increment());
console.log(increment());

lemmiwinks

Ilk basilan deger 1 olsun isterseniz ++counter olacak tabi :)

lemmiwinks

Closure olayını bilmiyordum sanırım ölçülmesi gereken bilgi buydu teşekkür ederim ^^

ananiyimioguz

Generator / Iterator sormuşlar direkt.

Fonksiyon bu:

function* it() {
let i = 0;
while(true){
i++;
yield i;
}
return i;
}

Kullanırken de:

let x = it()

x.next().value // 1
x.next().value // 2
x.next().value // 3

diye diye kullanabiliyorsun.

plutongezegendegilmi
1

mobil görünümden çık