R Dilinde Mustache Template Sistemi Kullanımı
Ş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.