published on 03.07.2018

Bu yazıda, liquid syntax’ı ile diziler üzerinde yapılabilecek bazı işlemler üzerinde duracağım. Etiketlere Göre İlgili Yazılar Devam konusundaki inadım üzerine liquid’in array yapısı ile epey içli dışlı oldum. Öğrendiklerimi burada not alacağım.

Boş Dizi Nasıl Tanımlanır ?

Doğru cevap: “Tanımlanamaz!” Öyle bir yol yok. Mesela, C#‘da List<int> mylist = new List<int>();. Boş bir liste oluşturduk az önce. Liquid syntax’ında hilelere başvurmak zorundasınız.

{% assign list = '' | split: '' %}

Belli Bir Indexe Yeni Değer Nasıl Atanır ?

{% assign list[index] = value %}

index yerine değeri eklemek istediğiniz index, value yerine de değeri yazın.

Keşke! Ne yazık ki böyle bir yol yok. Bir dizinin belli bir indexine yeni bir değer atayamazsınız. Diziyi tamamen yeniden oluşturmalısınız.

Diziye Yeni Değer Nasıl Eklenir ?

Ekleyemezsiniz. Tek çareniz concat fonksiyonu ki o da yalnızca array ile arrayi birleştirir. Yani yine bir hileye başvurmalıyız.

Önce, atayacağımız değeri tek elemanlı bir arraye çeviririz. Tıpkı başta boş dizi tanımladığımız gibi.

{% assign value = "my_very_special_value" | split: 'ğçş' %}
{% assign list = list | concat: value %}

Neden sadece split: '' değil de split: 'ğçş'. Çünkü ilk yöntem değeri karakter bazında böler. Mesela Mert |split: '', ['M', 'e', 'r', 't'] şeklinde 4 elemanlı dizi oluşturur. split: ',' Virgüllere göre böler. ‘ğçş’ art arda gelme ihtimali olmadığı için, bir elemanlı dizi, yani tekrar aynı değeri elde edeceğiz.

Eğer bu şekilde kukla split kullanmazsak, concat fonksiyonu yalnızca arrayler için geçerli olduğunu söyleyen bir hata verecektir.

Bir Diziyi Başka Bir Diziye Göre Sıralamak

Teknik anlamda kolay olması gereken bu olay, burada imkansıza yakındır. Aklıma ilk gelen yapı, dictionary olmuştu. Tabii ki aradığımı bulamadım. Daha sonra kendi 2 boyutlu arrayimi oluşturayım dedim. Yine mümkün olmadığını gördüm. İki ayrı array’i aynı döngü içinde döndürmekten başka çare ne yazık ki bulamadım.

2 Boyutlu Diziler

Her ne kadar direkt iki boyutlu dizi tanımlayamasak da mevcut bir yapıya aşağıdaki gibi ulaşabiliriz.

{% assign x = site['collection_name'][0].title %}

'collection_name' adındaki koleksiyonun 0. elamanının title değeri x değişkenine atanmıştır. Benzer şekilde, kendi .yaml dosyamızı oluşturup orada multi-dimensional yapılar tanımlayıp çağırabiliriz.

En Küçük Değeri Elde Etmek

{% assign my_array =  "1,2,3,4,0,1,-5,8" | split: "," %}
{% assign min_val =  my_array | sort | first %}

min_val = -5 olacak şekilde atanmıştır.

Dizi[i]‘yi myVal ile Kıyaslamak

{% assign myVal = 10 %}
{% assign my_array =  "1,2,3,4,0,1,-5,8" | split: "," %}

{% for arrayVal in my_array %}

    {% if arrayVal > myVal %}
        // Do something here...
    {% endif %}
{% endfor %}

Kod sadece bir örnek, eğer array’deki değer daha büyükse if içinde bir şeyler yapacağız. Burada dikkat edilmesi gereken arrayVal’ın integer olmamasıdır. string ile integerı kıyaslayamayacağımıza dair bir hata alırız. Çözümü kolay. If statementtan hemen önce arrayVal’ı integer’a çevirmeliyiz.

{% assign arrayVal = arrayVal | times: 1 %}

Eğer float’a çevirmek istiyorsak 1.0 ile çarpmalıyız. Float’a ya da integer’a çevirmemiz bölme işleminde fark yaratacaktır. Eğer float’a çevirirsek float bölüm 1.0/4 = 0.25, integer’a çevirirsek integer bölüm 1/4 = 0 elde ederiz.

You are reading the 9th of 19 episodes in Jekyll.
Published on 03.07.2018 by Mert Bakır with commit db8d56a.
jekyll
#jekyll #liquid #static-site
Next episode:
Pagination Filtered by Category
published on 18.05.2018

Pagination. Sayfalandırma. İsteğimiz her post için ‘önceki’ ve ‘sonraki’ postlara gidecek birer link oluşturmak ve bunu herhangi bir plugin kullanmadan yapmak. Aslında, postları tarihe göre sıralayıp önceki ve sonraki postlar için birer link ekleyeceğiz. Olduça basit bir iş. …

published on 01.07.2018

Oldukça uzun, bir o kadar da gerekliliği tartışılır kod parçasını paylaşmak üzereyim. Baştan söyleyelim, biraz döngüler dönecek if statementlar kontrol edilecek. Bunlara bağlı olarak, eğer blogunuzda çok post varsa build time kötü derecede etkilenecek. Ne kadar etkisi olur, 11 postluk blogta şu an …

published on 03.07.2018

Bu yazıda daha önce yazdığım Etiketlere Göre İlgili Yazılar konusundaki yapıyı eleştirip iyileştireceğiz. En azından başlangınçta öyle düşünüyordum. Kısaca hatırlayalım, ne yaptığımızı: […] Amaç: Tüm postlar arasından (all_posts) mevcut sayfanın etiketlerinden (page.tags) en az birine sahip …

published on 10.07.2022

Previously, I’ve published a blog post about deploying static content on heroku with basic authentication. The main purpose was to get basic auth for a freely hosted static website. In that post, we hosted the source code on GitLab and configured a CI/CD pipeline to render the static content …

published on 28.05.2022

Each git commit has a field called Author which consists ‘user.name’ and ‘user.email’. We usually set these variables once, after installing git, with git config --global so that each repo gets the variables from the global definition. We can also set them locally for a …

published on 25.05.2022

In this post, I’ll first walk through hosting static content with basic authentication. Then, we’ll look into deploying to Heroku using GitLab Pipelines, more specifically deploying a certain sub-directory within the project instead of pushing the whole project. Also, I’ll share …

published on 17.04.2022
edited on 15.07.2022

Önceki bölümde, markdown formatını LaTeX formatına dönüştürmek için kullanılan Pandoc yazılımından bahsetmiştik. Şimdi konuyu bir adım daha ileri taşıyıp ve bookdown’a geçiyoruz. Bookdown; Rmarkdown kullanarak teknik dökümanlar, kitaplar yazabilmemizi sağlayan, Yihui Xie tarafından yazılmış …

published on 10.04.2022

I’ve been using WSL-2 on Windows for over a year. It’s very useful because some Python packages are just a headache to install on Windows. Also, docker. It’s just better on Linux. Yet, WSL-2 can also be problematic. I remember trying a dual-boot setup when things just went way too …

published on 03.03.2022

In this post, I’ll share how to install geopandas and some other gis related packages on Windows. If you are on Mac or Linux you can probably just pip install those without any issue. I usually had to do a google search every time I wanted to install these packages on Windows environment. Of …