JavaScript Mülakat Soruları: Temelden İleri Seviyeye – Part 6

javascript mülakat soruları part 6 öne çıkan görseli

JavaScript mülakat soruları serimizin 6. bölümünden merhabalar. Dev serimiz aşamalı bir şekilde ilerlemeye devam ediyor. Serimizin diğer bölümlerine aşağıdan ulaşabilirsiniz.

Toplamda 50 soruyu geride bıraktık. JavaScript mülakat soruları serimize şimdi 51. sorudan devam edelim.


Soru 51

JavaScript mülakat soruları serimize && (ve) operatörünün tekrarıyla başlayalım.

console.log(true && "false");

console.log(typeof (true && "false"));

İlk ifademizi inceleyelim. Hatırlarsak && operatörü bulduğu ilk falsy değeri döndürüyordu. console.log(true && “false”); ifadesinde ilk değer olan true, truthy bir değerdir. Diğer ifadeyi de kontrol edelim. Diğer ifade “false”. Burada dikkat etmemi gereken nokta false değerinin iki tırnak içinde yazılmış olmasıdır. Eğer bir ifade iki tırnak içerisinde yazılırsa JavaScript bunu doğrudan string formatına çevirir. Bildiğimiz üzere tüm string formatlar varsayılan olarak truthy değere sahipti. && operatöründe eğer karşılaştırdığımız iki değer de truthy ise, en sonki değer dönüyordu. Bu yüzden konsolda önce false stringini görürürüz. (Dikkat! Boolean olan false değil, string olan false.)

console.log(typeof (true && “false”)); ifadesinde yine aynı karşılaştırmanın bu sefer veri türünü konsola yazdırıyoruz. Az önce de belirttiğimiz gibi konsolda false stringini görüyorduk. Bu yüzden veri türü de string olur ve konsolda string çıktısını görürürüz.

Soru 52

let val1 = -Infinity;
console.log(typeof val1);

let val2 = NaN;
console.log(typeof val2);

let val3 = undefined;
console.log(typeof val3);

val1 değişkenimize bakalım. JavaScript’te Infinity değerlerin veri tipi number’dır. Bu yüzden konsolda number görürüz.

val2 değişkenimizin değeri NaN. NaN, daha önce karşımıza çıkmıştı. Kısaca matematiksel işlem sonucu ortaya çıkan ve sayı olmayan değerleri ifade eder. Durum böyle olmasına rağmen NaN’ın veri türü number’dır. Bu yüzden konsolda ikinci sırada number görürüz.

val3 değişkeninin değeri undefined. JavaScript’te undefined’ın veri türü yine bir undefined olur. Bu yüzden konsolda son sırada undefined çıktısını görürüz.

Soru 53

let name = "Şekip";

if(isNaN(name)){
console.log("Sayı değil.");
} else {
console.log("Sayı.");
};

isNaN fonksiyonu bir değerin sayıya dönüştürülüp dönüştürülemeyeceğini kontrol eder. Eğer söz konusu değer sayıya dönüştürülebiliyorsa false çıktısını, dönüştülemiyorsa true çıktısını alırız. isNaN fonksiyonunun çalışma mantığı ters işler. Bu da JavaScript’in garipliklerinden biri. 😀

Örneğimizde, name değişkeninin değeri string bir ifade. isNaN fonksiyonu burada string veri tipini number veri tipine dönüştürmeye çalışır. Şekip stringi number veri tipine dönüştürülemeyeceğinden true döndürülür. Böylelikle konsola “Sayı değil.” yazdırılır.

Soru 54

let start = 100;

let iSay = "Selam!";

if(start >= 17 || iSay !== "N'aber?") console.log("İyidir.");

|| (veya) operatörünü tekrar edeceğimiz bir soru. start değişkenimizin değeri 100. iSay değişkenimizin değeri ise “Selam!”. Koşullu ifademiz içinde veya operatörü iki koşulu karşılaştırıyor. Hatırlayacağımız üzere veya operatörü bulduğu ilk truthy değeri döndüyordu. Koşulları incelersek önce start’ın 17’den büyük veya ona eşit olup olmadığını kontrol ederiz. 100, 17’den büyük olduğu için true döner. İlk truthy değer döneceğinden diğer ifadeye bakmamıza gerek kalmaz ve koşul sağlandığı için konsolda “İyidir.” stringini görürüz.

iSay !== “N’aber?” ifadesine de bakalım. Burada üç eşitlik operatörünün tersini görüyoruz. (!==) Hatırlayacağımız üzere ters üç eşitlik operatöründe iki değerin hem değer hem de veri türü açısından aynı olup olmadığını kontrol ediyorduk. iSay değişkenimizin değeri “Selam!” ve diğer kıyaslanan değer ise “N’aber?”. Bu iki değer birbirine eşit olmadığı için normalde false döner ancak ters üç eşitlik operatörü olduğu için false’un karşıtı true dönecektir.

Soru 55

function phrase() {
console.log("Kim bilir belki yarından da yakın.")
};

phrase();

Burada ilk defa JavaScript’teki fonksiyonlar konusunu görüyoruz. Fonksiyonlar kısaca belli bir işlemi gerçekleştirmek için kullanılan JavaScript ögeleridir.

Örneğimizde phrase adında bir fonksiyon tanımladık. Bu foksiyon konsola “Kim bilir belki yarından da yakın.” stringini yazma işlevini üstleniyor. Bu fonksiyonu çalıştırmak/tetiklemek için alt tarafta çağırdık. (phrase() ifadesi ile) Çağırmamızla birlikte fonksiyonumuz tetiklenecek ve ekrana “Kim bilir belki yarından da yakın.” stringini yazdıracaktır.

Soru 56

let sum = (num1, num2) => num1 + num2;

console.log(sum(5,10));

Bir önceki soruda fonksiyonları gördük. Aslında bu soruda da fonksiyon yapısını görüyoruz zira buradaki ifade JavaScript’teki fonksiyonların modern yazımının bir örneği. Buna arrow function (Ok fonksiyonu) diyoruz. Ok fonksiyonları, geleneksel fonksiyonlara göre yazımı ve okunması daha kolay bir yapıya sahiptir. Aradaki farkı görebilmek adına üstteki fonksiyonu geleneksel yöntemle yazalım:

function sum(num1, num2) {
return num1 + num2;
};

console.log(sum(5, 10));

Burada sum fonksiyonunu tanımladık ve parametre olarak num1’i ve num2’yi belirledik. Bu fonksiyon bu iki parametrenin alacağı değerlerin toplamını döndürür. (return num1 + num2 ifadesiyle). Alttaki console.log() fonksiyonumuza parametre olarak 5’i ve 10’u girdiğimizde 15 çıktısını alacağız.

Ok fonksiyonunda da mantık aynıdır. Parametre olarak num1’e ve num2’ye, 5 ve 10 değerlerini yerleştiririz. Bu değerleri topladığımızda 15 çıktısını alırız.

Soru 57

function goodFunc() {
let val = 11;
};

goodFunc();

console.log(val);

JavaScript’te değişkenlerin tanımlandığı yer önemlidir. Bir değişken global kapsamda (Tüm JavaScript dosyasında geçerli) veya yerel kapsamda (Sadece fonksiyonun tanımlandığı yerde geçerli) tanımlanabilir. Buna scope diyoruz. Burada yerel kapsamda tanımlanmış bir değişken görüyoruz. Çünkü val değişkenimizi goodFunc() fonksiyonumuzun içinde tanımladık.

Burada Uncaught ReferenceError: val is not defined hatasını alırız çünkü val değişkeni goodFunc() fonksiyonumuza özel bir değişkendir. Eğer val değişkenimizi fonksiyonumuzun dışında tanımlasaydık bu durumda konsolda 11 çıktısını görecektik.

Soru 58

function firstFunc() {
let funcName = "firstFunc";
let val = secondFunc();
return val;
};

function secondFunc() {
let funcName = "secondFunc";
return "Şekip";
};

console.log(firstFunc());

Biraz komplike bir soru gibi görünüyor ancak baştan adım adım ilerlersek daha rahat anlaşılacaktır.

Burada iki adet fonksiyonumuz var. Birinci fonksiyonumuz olan firstFunc() içinde iki tane değişkenimiz var. funcName değişkenimiz ilk fonksiyonumuzun adını string bir ifade olarak alıyor. İkinci değişkenimiz val ve bu değişken değer olarak ikinci fonksiyonumuzu alıyor ve bunu döndürüyor. O halde ikinci fonksiyonumuzun döndürdüğü değer, ilk fonksiyonumuzun döndürdüğü değerle aynı olacak.

İkinci fonksiyonumuzda da benzer bir yapı var. İkinci fonksiyonumuzun içinde yine funcName adlı bir değişken var. Ancak dikkat edelim ki ilk fonksiyonumuzdaki funcName değişkeni ile ikinci fonksiyonumuzdaki funcName farklı değişkenlerdir. Çünkü bunlar yerel kapsamda belirtilmişlerdir ve her biri kendi fonksiyonuna aittir. İkinci fonksiyonumuz Şekip stringini döndüreceği için ilk fonksiyonumuzun döndüreceği değer de Şekip olacaktır.

Fonksiyonlarımızın her biri Şekip stringini döndürüyor ancak dikkat edelim ki bunlardan sadece firstFunc() fonksiyonunu çağırıyoruz. Bu yüzden konsolda sadece bir adet Şekip stringi görürüz.

Soru 59

function tester(start) {
console.log("Başla: " + start);
if(start > 3) tester(--start);
};

tester(7);

tester fonksiyonumuz 7 değeriyle çağırdığımız için start parametresi 7 değerini alacaktır. console.log() fonksiyonumuzda yerine yerleştirdiğimizde konsolda önce“Başla: 7” stringini görürüz. Hemen alttaki koşullu ifadede ise start parametresinin 3’ten büyük olması durumunda değerinin 1 azaltıldığı bir durum var. Aslında burada yinelemeli (recursive) fonksiyonun bir örneğini görüyoruz. Koşullu ifade tamamlanana kadar bu fonksiyon kendini tekrar edecektir. Önce “Başla: 7” stringini konsolda görürüz. Ardından koşullu ifade devreye girer ve start parametresinin (İlk değer 7) 3’ten büyük olup olmadığına bakar. Eğer koşul sağlanıyorsa (ki sağlanıyor) start parametresinin değeri 1 azaltılır. Yeni durumda start parametresinin değeri 6 olur ve fonksiyon başa sararak bu sefer konsola “Başla: 6” yazdırır. Bu şekilde start parametresinin değeri 4’e kadar azalır. Sonlara doğru 4 > 3 eşitliği kontrol edilir ve konsola 3 yazdırılır. start parametresi 3 değerini aldığında ise 3 > 3 eşitsizliğinden dolayı tekrarlama işlemi durur. Sonuç olarak konsolda aşağıdaki çıktıları görürüz:

Başla: 7
Başla: 6
Başla: 5
Başla: 4
Başla: 3

Soru 60

let num = 11;

function awesomeFunc() {
let num = 22;
console.log(num);
};

awesomeFunc();

Global kapsamda belirlenmiş bir num değişkenimiz var ve değeri 11. awesomeFunc() fonksiyonumuzu kontrol ettiğimizde yine aynı isimdeki değişken karşımıza çıkıyor ve değeri 22 olarak belirleniyor. Önceki sorularda da bahsettiğimiz üzere global kapsamda belirlenen bir değişken ile yerel kapsamda belirlenen değişken aynı değildir. let num = 22; değişkenimiz awesomeFunc() fonksiyonuna aittir ve let num = 11; değişkeninden farklıdır. Bu yüzden fonksiyonumuzu çağırdığımızda konsolda 22 çıktısını görürüz.


Bir JavaScript mülakat soruları bölümünün daha sonuna geldik. Konular biraz daha ağırlaşıyor. Adım adım ilerleyerek JavaScript’e alışacağız. Umarım faydalı olmuştur. 7. bölümde görüşmek üzere.

2 thoughts on “JavaScript Mülakat Soruları: Temelden İleri Seviyeye – Part 6”

  1. Geri bildirim: JavaScript Mülakat Soruları: Temelden İleri Seviyeye – Part 7 - Frontçu Abi

  2. Geri bildirim: JavaScript Mülakat Soruları: Temelden İleri Seviyeye – Part 8 - Frontçu Abi

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top