[]

Değişkeni dışarıda tutmadan fonksiyon içindeki bir değeri 1 artırmak

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  (31.07.23 14:05:31) 
#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  (31.07.23 14:28:26) 
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  (31.07.23 14:32:12 ~ 14:34:30) 
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  (31.07.23 14:49:21) 
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  (31.07.23 14:56:59 ~ 14:57:51) 
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  (31.07.23 15:05:23) 
Ilk basilan deger 1 olsun isterseniz ++counter olacak tabi :)


  • lemmiwinks  (31.07.23 15:06:20) 
Closure olayını bilmiyordum sanırım ölçülmesi gereken bilgi buydu teşekkür ederim ^^


  • ananiyimioguz  (31.07.23 16:35:20) 
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  (31.07.23 20:57:44) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.