R Dilinde Mustache Template Sistemi Kullanımı

Güncelleme Yayın

Şablon (template) sistemlerine (engine ve dil bağlamında) R dilinde {{Mustache}} kullanımıyla devam ediyorum. Esasında paketin (package) adı whisker ve kendisi bir mustache implementasyonu. TDK, implementasyon kelimesine karşılık olarak kullanak ifadesini önermekte, gerçekleştirim olarak da duyarsanız şaşırmayın.

Özetlemek gerekirse, whisker mustache template (şablon)1 yapısının R programlama diline entegre edilmiş hali.

Rlang Whisker Kullanımı

Örnekler öncesinde, eğer ilgili template sistemine aşina değilseniz Mustache yazım kurallarıyla ilgili olarak Mustache.js yazıma göz atmanızda fayda var. Whisker bu template yapısını temel olarak alan bir R paketi. R dilinde farklı özelliklere sahip template yapıları mevcut; knitr2 bulardan en bilineni. Bu alternatifler içerisinde whisker daha temel ihtiyaçlara yönelik olarak değerlendirilebilecek oldukça pratik bir çözüm. Ancak, aktif olarak geliştirildiğini söylemek güç. GitHub sayfasındaki3 son commit 2015 yılına ait.

R Dilinde Mustache (Whisker) Template Dilinin Kullanımı

İlk olarak ilgili paketi CRAN üzerinden indirelim4.

install.packages("whisker")

İlgili paket yüklendiğine göre basit bir örnek işlem gerçekleştirebiliriz. Kullanabileceğimiz fonksiyonlar iteratelist(x, name = "name", value = "value"), rowSplit(x, ...), whisker.escape(x) ve whisker.render(template, data = parent.frame(), partials = list(), debug = FALSE). Örneğimiz yine ekrana {{name}} {{surname}} yer tutucuları üzerinden Hayden Mcguire yazdırmak olsun. Böylelikle kullanım benzerlikleri/farklılıklarının daha da netleşeceğini düşünüyorum.

Sabit alanımız şöyle: Hello! My name is {{name}} {{surname}}.

Sabit alan içerisindeki {{name}} {{surname}} alanlarına veriyi en pratik şekilde iletelim:

library(whisker)

template <- "Hello! My name is {{name}} {{surname}}"
data <- list(name = "Chris", surname = "Mcguire")
text <- whisker.render(template, data)
cat(text)

Örnekte görüldüğü üzere template içeriğinde yer alan yer tutuculara data üzerinden verileri iletmekteyiz. İletilen içerik ise whisker.render() tarafından gönderilen değer ile değiştirilmekte ve cat() ile son olarak dönen içeriği ekrana yansıtmaktayız.

Örneği biraz değiştirelim. Elimizin altında şablon olarak kullanabileceğimiz bir HTML dosyası olsun ve adını first.html koyalım. İçeriği şöyle olsun:

{{#status}}<h1>Hello! My name is {{name}} {{surname}}</h1>{{/status}}

R kodumuzu güncelleyelim ve status adında bir kontrol ekleyelim. Kodumuz {{name}} ve {{surname}} içeriğini status = TRUE olması durumunda gönderdiğimiz değerlerle değiştirsin ve sonuç her ne olursa olsun last.html dosyası oluşturarak kayıt etsin.

library(whisker)

template <- readLines("./first.html")
data <- list(name = "Chris", surname = "Mcguire", status = FALSE)

writeLines(whisker.render(template, data), "./last.html")

Tüm işlemimiz bu kadar. Son olarak $name ve $value değerlerini ardışık olarak (iterate) alalım.

library(whisker)
x <- list(name="Chris", surname="Mcguire", age="30")
iteratelist(x)

Kodu uyguladığımızda bize name, surname ve age değerleri şu şekilde yinelenerek dönecektir:

[[1]]
[[1]]$name
[1] "name"

[[1]]$value
[1] "John"

[[2]]
[[2]]$name
[1] "surname"

[[2]]$value
[1] "30"

[[3]]
[[3]]$name
[1] "age"

[[3]]$value
[1] "30"

Yukarıdaki gibi temel işlemler gerçekleştirebileceğimiz whisker template paketi ile ilgili ek örnekler için GitHub sayfasını inceleyebilirsiniz.