Maximilian JavaScript
Maximilian JavaScript
2025
Bir önceki tanım slaydında gördüğümüz son şey Javascript'in bir ana bilgisayar ortamında çalıştığıdır,
Yani bir Javascript motoru farklı ortamların bir parçası olabilir veya bu ortamlarda çalıştırılabilir. En iyi
bilinen ortam tarayıcıdır, modern tarayıcılarda yerleşik Javascript motorları vardır ve bu nedenle
Javascript kodunu çalıştırabilirler, ancak Javascript'i başka ortamlarda da çalıştırabilirsiniz, örneğin
sunucu tarafında, yani arada bir tarayıcı olmadan doğrudan bir bilgisayarda, yani bir tarayıcının içinde
değil, sadece makinenizde bunun gibi bir kod çalıştırabilirsiniz. Şimdi Javascript tarayıcıda çalışmak, web
sitelerini daha dinamik hale getirmek, yeni bir sayfa yüklemeden bir web sitesindeki şeyleri
değiştirebilmek için icat edildi diyebilirsiniz. Çünkü Javascript yüklenen HTML koduyla, CSS ile birlikte
yakından çalışabilir, Ayrıca arka planda HTTP istekleri göndermek için Javascript'i kullanabilirsiniz,
böylece bazı sahne arkası istekleri göndermek ve sayfayı yeniden yüklemeden veri almak ve çok daha
fazlasını yapmak için. Javascript'in tarayıcı ortamında çalışırken yapamayacağı bazı şeyler de vardır,
örneğin güvenlik nedeniyle yerel dosya sisteminize erişemez çünkü aksi takdirde ziyaret ettiğiniz her web
sayfası dosya sisteminizi okuyabilir, belki bilgisayarınızdaki dosyaları silebilir ve bu da elbette korkunç
olurdu ve genel olarak bir sanal alanda çalışır. İşletim sisteminizle etkileşime giremez vb. diyebilirsiniz,
tarayıcı size bu ortamda yapabileceğiniz belirli şeyler verir ve diğer şeylere izin vermez. Dediğim gibi,
tarayıcı sadece bir ortamdır, Javascript'in icat edildiği ortamdır, ancak şu anda kısıtlı olduğumuz tek
ortam değildir, bunun yerine Google'ın geliştirdiği Javascript motoru, v8 motorun adıdır, bazı insanlar
tarafından Javascript'i her yerde çalıştırmak için çıkarılmıştır. Çünkü fikir, tarayıcıda motorumuz varsa,
neden onu tarayıcıdan çıkarmıyoruz ve daha sonra Javascript'i doğrudan makinenizde başka herhangi bir
yerde çalıştırmak için kullanabileceğiniz bağımsız bir araç olarak kullanılabilir hale getirmiyoruz ve bu
araç sonunda [Link] olarak adlandırıldı. Node. js herhangi bir makinede çalıştırılabilir ve bu nedenle
genellikle web arka uçları oluşturmak, web sunucuları oluşturmak için de kullanılır, sunucu tarafı
Javascript de bunun için bir açıklama olarak sık sık duyduğunuz bir şeydir. Şimdi PHP gibi sunucu tarafı
dilleri veya Java ve diğer dilleri de biliyor olabilirsiniz, Node ile Javascript bir web sayfasının arka ucunda,
yani kullanıcılarınızın tarayıcısındaki istemcide değil sunucuda çalıştırmak için de kullanılabilir. Şimdi
Node. js'nin de yapabileceği ve yapamayacağı belirli şeyler vardır, çünkü doğrudan bir makinede çalışıtğı
için, Node ile yerel dosya sistemine erişebilir, böylece dosya yazabilir ve benzeri işlemleri yapabilirsiniz
çünkü tarayıcı tarafı Javascript'in aksine Node. js kodunun sizin tarafınızdan aktif olarak çalıştırılması
gerekir, bir web sayfasını ziyaret etmeniz ve ardından bunun gerçekleşmeye başlaması gibi değildir,
bunun yerine yalnızca çalıştırıldığı makinedeki dosya sistemine erişebilir, örneğin çalıştığı sunucu, sizin
makineniz değil ve ayrıca işletim sistemi ile etkileşime girebilir vb.
Ancak diğer yandan, yüklenen web sayfasına doğrudan erişimi olmadığından, HTML veya CSS'yi tarayıcı
tarafında olduğu gibi manipüle edemez. Javascript'in yapabildikleri, yani temelde burada ters erişim
yeteneklerimiz bile var ve bunlar Javascript'in çalışabildiği farklı ortamlar.
Şimdi değişkenler ve sabitler nedir? Değişken, bir veri kabı ya da veri deposu da diyebilirsiniz.
Yazacağınız çoğu programda, kullanıcı tarafından girilen ve daha sonra kullanıcının oturumunu açmak
için kullandığınız bir kullanıcı adı veya hesap makinemizin bir örneği olarak, elimizdeki son, en son
sonucumuz ve kullanıcının az önce girdiği ve eklemek istediğimiz sayı gibi bazı verilerle çalışacaksınız.
Bu, saklamak istediğimiz veriler olacaktır çünkü programımızın doğru çalışması için bu verilere ihtiyacı
vardır, örneğin hesap makinesinde eski sonuca ve kullanıcının yeni girdiği sayıya ihtiyacımız vardır, bu
nedenle yeni sonucu elde etmek için bu iki veriye ihtiyacımız vardır. Dolayısıyla, yeni üçüncü
değişkenimiz olan mevcut sonucu elde etmek için bu iki değişkene ihtiyacımız var.
Yani değişken, bazı verileri tutan bir veri kabıdır ve Javascript'te, let anahtar sözcüğünü kullanarak bir
değişken oluştururuz, ardından daha sonra inceleyeceğim bazı adlandırma kurallarını göz önünde
bulundurarak seçtiğiniz bir ad, ardından bir eşittir işareti ve ardından değişkende saklamak istediğiniz
değeri kullanırız. Şimdi oluşturulan bir değişkenle, onu her zaman yeniden atayabilir ve orada yeni bir
değer saklayabilirsiniz, bu yüzden burada mevcut kullanıcı adı değişkenini kullanıyorum ve ona yeni bir
değer atıyorum.
Şimdi sadece Javascript'in anladığı let anahtar sözcüğüne ihtiyacım var, eğer bir değişkeni ilk kez
tanıtıyorsanı[Link] sonra ona yeni bir değer atarsanız, bu anahtar sözcüğü tekrarlamazsınız, bu nedenle
let anahtar sözcüğüne yalnızca Javascript'e hey işte programımın ihtiyaç duyacağı yepyeni bir değişken
olduğunu bildirmek için ihtiyacınız vardır, daha sonra bu değişkeni kullanırsanız, bunu let olmadan
yaparsınız. Yani bir değişken, değerin değişebileceği bir veri kabıdır, değişmek zorunda değildir ancak
genellikle değişir. Şimdi bu değişkenin özel bir formuna da sahipsiniz, sabitleriniz var, örneğin diyelim ki
uygulamanızda bir tür sabit olan toplam kullanıcı sayınız var. Şimdi bu hala bir veri kabıdır, ancak let
anahtar sözcüğü yerine, Javascript'te yerleşik olan ve Javascript'in tanıdığı ve anladığı başka bir anahtar
sözcük olan const anahtar sözcüğü ile oluşturursunuz.
Şimdi, const anahtar sözcüğü ile oluşturulan sabitlerle ilgili özel bir şey var, orada değeri
değiştiremezsiniz, bunu yapmaya çalışırsanız bir hata alırsınız. Dolayısıyla, değerler değişmemelidir.
Şimdi, gerçekten değişken değilse, gerçekten değişemiyorsa, neden bir değişkende saklanan bir değere
sahip olduğunuzu merak edebilirsiniz ve cevap bazen kodunuzda, asla değişmeyen değerlere sahip
olursunuz, ancak yine de böyle bir veri kabında saklamak istersiniz. Böylece bunları merkezi bir yerde,
diyelim ki dosyanızın başında başlatabilir ve ardından programınız boyunca kullanabilirsiniz, belki aynı
sabiti farklı yerlerde birden fazla kez kullanabilirsiniz, böylece her zaman aynı tek sabite referans
verirsiniz ve kodunuzu yazarken kodda bu değeri değiştirirseniz. On farklı yer yerine tek bir yerde
değiştirirsiniz, ancak birazdan yapacağımız bazı kodlar yazmaya başladığımızda bu daha açık hale
gelecektir.
Şimdilik, değişken oluşturmanın bu iki farklı yolunun farkında olun, let ve const. Let ile değişkenler
değiştirilebilirken const ile değiştirilemezler, genel sözdizimi anahtar kelime adıdır ve ardından hemen
bir değer depolamak istiyorsanız, değerde eşittir işareti ve ayrıca hemen küçük bir ipucu, genellikle
sabitleri olabildiğince sık kullanmak istersiniz, bu ilk başta garip gelebilir çünkü onlarla yapabilecekleriniz
kısıtlıdır, değil mi?
Onları değiştiremezsiniz ama tam da bu yüzden onları mümkün olduğunca sık kullanmak istersiniz,
niyetinizi çok açık hale getirir. Eğer programınızın ya da kodunuzun onu kullandığınız bölümünün yaşam
döngüsü boyunca hiç değişmeyen bir değere sahipseniz, o zaman bunu açıkça belirtmek istersiniz,
böylece kodunuzu okuyan başka bir geliştirici bu veri parçasının asla değişmeyeceğini hemen anlar, bu
da kodunuzu başkaları için daha kolay anlaşılır hale getirir. Şimdi bu çok yeni ve çok teorik bir bilgiydi,
kullandığımızda daha anlamlı olacak, o yüzden kullanalım.
Local-global scope
Yani değişkenler ve sabitler için sıra önemlidir, Fonksiyonlar için önemli değildir. Buradaki kodumuzda
ilginç bir şey daha var ve o da fonksiyonun içinde bir sabitimiz ve fonksiyonun dışında bir değişkenimiz ve
bir sabitimiz olması.
Şimdi neyi ne zaman kullanmalısınız ve aradaki fark nedir? Bir fark var mı? Arada bir fark vardır ve genel
olarak, bazı verileri yalnızca fonksiyonda kullanıyorsanız, örneğin fonksiyonda kullandığım bu sonucu
burada döndürüyorum, o zaman bunu fonksiyonda tanımlamak istersiniz.
Bu kod teknik olarak işe yarayacaktır çünkü burada yaptığım şey, bu sonuç değişkenini global olarak
tanımlamak, yani kodumda, daha sonra bir fonksiyonda ona yeni bir değer atıyorum çünkü
fonksiyonlarınızda ve aklınızda tutmanız gereken önemli bir şey, fonksiyon dışında tanımlanan herhangi
bir değişkene veya sabite erişebilirsiniz, böylece global olarak tanımlanan değişkenleri veya sabitleri
okuyabilirsiniz, Böylece bu result değişkeniyle etkileşime geçebiliriz ve ona yeni bir değer atıyorum ve bu
nedenle daha sonra fonksiyonu çağırdığımda, aslında geri dönüş değerini umursamıyorum, bunun
boşluğa gitmesine izin veriyorum, ancak fonksiyonun içinde result'a yeni bir değer atadığım için, bu
global değişkeni kullanabilir ve başka bir global değişkende saklayabilir veya başka bir yerde
kullanabilirim, ne yapmak sterseniz. Ancak bu çok iyi bir kod olmayacaktır çünkü global bir değişkeni
manipüle eden bir fonksiyonumuz var, bu bazen yapmak isteyeceğiniz bir şeydir ancak genellikle
fonksiyonlarınızı anlamayı ve ne yapacaklarını tahmin etmeyi zorlaştırır ve ayrıca bu değeri burada
döndürmemiz tamamen gereksizdir, bu yüzden yazabileceğimiz en iyi kod değildir.
Bunun yerine, daha önce sahip olduğumuz kurulumla devam edersek çok daha iyi olur; burada
içerdiğimiz sabitimiz var, bunu döndürdük ve bu nedenle işlev bağımsız olarak çalışıyor. Sihirli bir şekilde
global değişkenlerimizi değiştirmez, bunun yerine fonksiyonu çağırdığımızda, bu fonksiyonun hiçbir şeyi
değiştirmeyeceğini, global hiçbir şeyi değiştirmeyeceğini, bunun yerine sadece kendi dahili verileriyle
çalışacağını ve sonra bize geri döneceğini biliriz. Buna saf fonksiyon denir, bir girdi alır, bir çıktı döndürür,
aynı girdi için her zaman aynı çıktıyı döndürür ve küresel hiçbir şeyi manipüle etmez, ancak
fonksiyonların küresel değişkenlere erişebileceğini, tanımlamış olabileceğiniz diğer fonksiyonlara da
erişebileceğini belirtmek gerekir. Böylece bir fonksiyonu bir fonksiyonun içinden çağırabilirsiniz ve bu
Javascript'te yerleşiktir ve zaman zaman kullanacağımız iyi bir şeydir.
Şimdi diğer yol işe yaramayacaktır, eğer bir fonksiyonun içinde bir sabit veya değişken tanımlarsanız, o
zaman bu yerel veya blok kapsamı olarak adlandırılan bir kapsama sahiptir, yani bu bloğun içinde
kullanılabilir, blok bu küme parantezleriyle çevrelenir veya işaretlenir ve bu bloğun herhangi bir yerinde
kullanabiliriz, ancak bunun dışında kullanamayız. Dolayısıyla, işlevi tanımladıktan sonra burada result'ta
depolanan değerin çıktısını almak istediğim bir uyarı vermeye çalışırsam, bunu yeniden yüklediğimde
hiçbir şey olmadığını göreceksiniz. Gördüğünüz gibi bir hata alıyoruz ve gerçekten de geliştirici
araçlarında konsolumu tekrar açarsam, sonucun tanımlanmadığına dair bir referans hatası alıyorum.
Çünkü burada 9. satırda bir değişken kullanmaya çalışıyorum, yani buradaki bu satırda tanımlanmamış
çünkü az önce açıkladığım gibi, Global değişkenleri, sabitleri ve fonksiyonları fonksiyonların içinde
kullanabilirsiniz, ancak yerel değişkenleri, sabitleri veya fonksiyonları kullanamazsınız, bu nedenle
fonksiyonların içinde tanımlanan değişkenler, sabitler veya fonksiyonlar ve evet fonksiyonların içinde
fonksiyonlar tanımlayabilirsiniz. Bunları fonksiyonun dışından kullanabilirsiniz. Dolayısıyla, result'u
fonksiyonun dışında kullanmak işe yaramayacaktır çünkü bu fonksiyonun içinde tanımlanmış bir sabittir
ve fonksiyonu çağırdıktan sonra burada ya da burada kullansak da işe yaramayacaktır çünkü burada
sadece bir fonksiyon çağırdığımızı düşünebilirsiniz, bu yüzden bundan sonra result tanımlanmalıdır ve
şimdi kullanılabilir olmalıdır. Aslında, şimdi yeniden yüklerseniz, burada hala aynı hatayı alırsınız, şimdi 9.
satır yerine 11. satırda, çünkü bu kodu taşıdım, ancak yine de, sonuç olarak işlevin dışında mevcut değil
ve bu Javascript ile anlamanız gereken önemli bir şey. Fonksiyonlar çevrelerindeki bağlama, yani
üzerlerinde veya dışlarında tanımlanan tüm değişkenlere ve benzerlerine tam erişime sahiptir, ancak bir
fonksiyonun içinde tanımladığınız şey yalnızca orada kullanılabilir, onu dışarı çıkarmanın tek yolu onu
geri döndürmektir.
Şimdi bu noktada şunu da merak edebilirsiniz: Bir değişken global olarak tanımlandıktan sonra onu bir
fonksiyon içinde yerel olarak oluşturmaya çalışırsak ne olur?
Yani global olarak let veya const ile bildirdik ve daha sonra fonksiyonda let veya const ile aynı şeyi
yapmak istiyoruz, yani mevcut olanın üzerine yazmak değil, yeni bir tane oluşturmak istiyoruz, bu
mümkün mü?
Ancak daha sonra bunu global düzeyde yeniden beyan etmeyiz (buna izin
verilmez).
Sadece fonksiyonun içinde başka bir değişken bildiririz. Ancak
fonksiyonlardaki değişkenler kendi kapsamlarına sahip olduklarından,
JavaScript “gölgeleme” adı verilen bir şey yapar.
Farklı bir kapsamda yeni bir değişken yaratır - bu arada bu değişkenler global
değişkenin üzerine yazmaz ya da onu kaldırmaz - ikisi birlikte var olur.
greetUser fonksiyonu içinde userName atıfta bulunurken artık her zaman
yerel, gölgelenmiş değişkene atıfta bulunuyoruz. Yalnızca böyle bir yerel
değişken yoksa, JavaScript genel değişkene geri döner.
Bir fonksiyonu çalıştırmanın iki yolu varmış gibi göründüğünü görmek kafa
karıştırıcı olabilir:
1. function add() {
2. something = someNum + someOtherNum;
3. }
add() vs add
=> add()
Bu arada, kodunuzun herhangi bir yerine sadece add yazmanız hiçbir işe
yaramayacaktır:
let someVar = 5;
1. add
2. alert('Do something else...');
Why?
Neden mi?
Çünkü oraya sadece fonksiyonun adını yazıyorsunuz ama JavaScript'e başka
hiçbir bilgi vermiyorsunuz. Temelde bu isimle ne yapacağını bilmiyor ("Bunu
bir tıklama gerçekleştiğinde mi çalıştırmalıyım? Belirli bir süre sonra mı? I
don't know...") ve dolayısıyla JavaScript bu ifadeyi görmezden gelir.
Nesneler - Yaygın Sözdizimi Hataları
Son derste bir nesne oluşturmak için doğru sözdizimini öğrendiniz:
1. const user = {
2. name: 'Max',
3. age: 30
4. };
2. Anahtar-değer çiftleri noktalı virgül ile DEĞİL virgül (,) ile ayrılır. Bir
nesnenin içinde (yani {} arasında) noktalı virgül kullanmak bir sözdizimi
hatası olacaktır!
3. Değerler anahtarlara/özelliklere iki nokta üst üste (:) ile atanır, eşittir
işareti (=) ile DEĞİL. Bir nesnenin içinde (yani {} arasında) eşittir işareti
kullanmak bir sözdizimi hatası olacaktır!
const worstPossibleUser = {
1. name = 'Max';
2. age = 30;
3. };
js
KopyalaDüzenle
[Link]('click', add);
❌ Yanlış Kullanım:
js
KopyalaDüzenle
[Link]('click', add());
➡️Bu hatalı! Çünkü add() parantez içinde yazıldığı için fonksiyon hemen çalıştırılır.
➡️Olay dinleyicisine bir fonksiyon değil, fonksiyonun dönüş değeri atanmış olur.
js
KopyalaDüzenle
let someVar = 5;
add;
alert('Do something else...');
➡️add sadece bir kelime olarak yazılmıştır ama JavaScript onunla ne yapması gerektiğini
bilmediği için yok sayar.
2 Nesne Tanımlarken Yaygın Hatalar ve Doğru Kullanım
js
KopyalaDüzenle
const user = {
name: 'Max',
age: 30
};
⚠️Önemli Noktalar:
js
KopyalaDüzenle
const worstPossibleUser = {
name = 'Max'; // ❌ "=" yerine ":" kullanılmalı
age = 30; // ❌ "=" yerine ":" kullanılmalı
};
4o
---
DOM'daki öğeleri sorgu seçici ile, get element by ID ile vb. nasıl seçebileceğinize bir göz attık, ayrıca bu
öğeleri manipüle etmek veya sadece onlardan veri okumak için nasıl kullanabileceğinize de bir göz attık.
Şimdi, tipik olarak DOM'da gezinme olarak bilinen öğelerin seçilmesiyle bağlantılı başka bir kavram daha
var ve DOM'da gezinmek ne anlama geliyor? Bu, bir öğeyi, bir düğümü seçtikten sonra, örneğin bir
listedeki tüm liste öğelerini eklemek için tüm alt düğümlerine dalmak isteyebileceğiniz anlamına gelir, bu
nedenle sorgu seçici veya benzeri bir şeyle ilgilenebileceğiniz her öğeyi manuel olarak seçmek yerine,
zaten seçtiğiniz bir öğeyi alabilir ve daha sonra bu öğeye dayalı olarak çocuklarına veya kardeşlerine vb.
geçebilirsiniz, DOM'da gezinmenin anlamı budur. Şimdi bunun için öncelikle kullanacağım birkaç terimi
açıklığa kavuşturmak istiyorum - çocuklar, torunlar, ebeveynler ve atalar çünkü bunların ne anlama
geldiğini anlamak önemlidir.
Şimdi çocuk veya çocukların ne anlama geldiğine, torun veya torunların ne anlama geldiğine, ebeveyn
veya ebeveynlerin ne anlama
Şimdi çocuk dediğimde, öğrendiğiniz bu DOM çaprazlama yöntemlerinden bahsederken bir çocuk
öğeden bahsediyorsam,
bu her zaman doğrudan bir çocuk düğüm veya bir öğe, yani bir öğe düğümü anlamına gelir ve bununla
burada,
bu küçük örnekte, paragrafın div'in bir çocuğu olduğunu, çünkü doğrudan bir çocuk öğe olduğunu
kastediyorum,
vurgulanan etiket değildir, çünkü em etiketi hala div etiketinin içinde yuvalanmış olsa da, doğrudan bir
çocuk değildir, paragraf,
öğeden bahsettiğimizde, aynı örnekte hem paragraf hem de em etiketi div öğesinin
Şimdi
bir üst öğe ve ata bir nevi zıttır - bir üst düğüm ya da öğe başka bir öğenin doğrudan üst düğümü
ya da öğesidir, dolayısıyla bu örnekte div paragrafın üst öğesidir ancak em'nin div'in çocuğu olmamasıyla
aynı
nedenden dolayı em'nin üst öğesi değildir ve diğer yandan bir ata öğe
ya da düğümden bahsedecek olursam, ata öğe paragrafın üst öğesidir, o zaman bu doğrudan veya dolaylı
bir ebeveyn
ilişkisidir, bu nedenle örneğin aynı örnekte, hem paragrafın hem de em etiketinin atası olarak div'e
sahibiz, bu nedenle bu önemlidir,
Dediğim gibi, DOM traversal, seçili bir öğeye, seçili bir düğüme sahip
olduğunuz anlamına gelir, diyelim ki bu div öğesi düğümü burada ve şimdi çevredeki veya iç içe geçmiş
öğelerin veya iç içe geçmiş
Her DOM nesnesinin sahip olacağı bu belirli özelliklerle her zaman yukarı çıkabilir, yani bir üst öğe veya
üst düğüm veya üst öğe içeren bir düğüm bulabilirsiniz, bu nedenle div
veya paragraf ya da her ne olursa olsun seçebileceğiniz her öğe nesnesi bu üst düğüm
fark, üst düğüm herhangi bir üst düğümü seçerken, üst öğe yalnızca aynı zamanda bir öğe olan bir üst
düğümü seçer, yani yalnızca üst HTML
öğelerini seçer.
Ayrıca, yalnızca doğrudan bir üst öğeyi almak için değil, belirli bir CSS sorgusuyla eşleşen herhangi bir
atayı almak için kullanabileceğiniz
Burada alt düğümler ve alt öğeler, metin düğümleri de dahil olmak üzere tüm alt
düğümleri seçmek için alt düğümler, yalnızca alt öğe düğümlerini, yani yalnızca HTML öğe nesnelerini
seçmek için alt
daha önce de gösterdiğim gibi, sorgu seçiciyi kullanabilir, öğeleri bir sınıf adına göre alabilir ve seçilen
aynı zamanda seçilen herhangi bir öğe nesnesinde her zaman kullanılabilen yöntemlerdir
ve bu nedenle, DOM ağacının o bölümünde bulabileceğiniz tüm torunlara daha derinlemesine dalmak
için bunları her zaman kullanabilirsiniz.
Şimdi, belirli bir öğenin ilk öğe çocuk düğümünü seçmek için ilk çocuk düğümünü ve ilk öğe
çocuğunu seçmek için ilk çocuk düğümünü almak için kullanabileceğiniz özel özellikler de
vardır ve aynı şey, belirli bir öğe için seçebileceğiniz son çocuk, son çocuk düğümü
ve son öğe çocuk düğümü için de kullanılabilir. Bu, DOM ağacında yukarı çıkmak veya DOM ağacının
derinliklerine, yani iç içe geçmiş öğelere
kalmak ve kardeş öğeleri seçmek istiyorsunuz. Bunun için, herhangi bir DOM nesnesi üzerinde
bir öğenin doğrudan kardeşini almanızı sağlayan önceki kardeş ve önceki öğe kardeş özelliklerine
sahipsiniz ve bu elbette o anda seçili öğeden önceki veya sonraki kardeşi almak için her iki yönde de
çalışır
ve önceki kardeş ve sonraki kardeş size bir sonraki kardeş düğümü verir, önceki öğeler kardeş ve sonraki
öğe kardeş size seçilen düğümün kardeşi olan bir sonraki öğe düğümünü verir.
Teori