Clojure is a functional programming language, that runs on JVM (Java Virtual Machine), CLR (Common Language Runtime) and JavaScript platforms.

I was considering to learn Lisp for a long time. The reason for this is that my lecturer Chris Stephenson had strong discourses on functional programming and he was using Racket (a Lisp dialect) in some of his classes. This led me to think of searching on Lisp programming language.

I read and watched the experiences of Lisp users on the Internet and the most interesting part of my research was the approaches of the users towards this language as…


Bölüm 1'de basit bir web uygulaması ayağa kaldırmıştık, bu bölümde ise middleware kavramını işleyip, önceki bölümde yaptığımız uygulamaya yeni yetenekler kazandıracağız.

Middleware

Middleware’ler aslında çok basit bir yapıya sahiptirler, ara katman olarak görev yaparlar. Bir istek geldiği zaman (bu istek hash map veri yapısı formundadır ve key value pairlerine sahiptir), middleware fonksiyonlarından geçer ve bu fonksiyonlar isteği (hash map’i) manipüle ederek bazı yeni key value pairleri eklerler. Java dünyasındaki Servlet Filters ve Spring Interceptors’lere benzetebilirsiniz.

Uygulamamızın sahip olduğu “/print-request” endpointini tarayıcınızda çağırırsanız gelen isteğin formunu ve içeriğini görebilirsiniz.

Middleware’leri Ekleme

/src/clj_web_app/core.clj dosyamızda bulunan :require alanına middleware namespaclerimizi ekleyip alttaki gibi güncelliyoruz.

wrap-gzip


Clojure’un dinamik ve esnek yapısı sayesinde JVM (Java Virtual Machine) üzerinde web uygulamaları geliştirmek bir hayli hızlı ve eğlenceli. Yazının sonunda Clojure ile ilgili birçok kaynağı sağladım.

Gerekli Uygulamalar

Proje Oluşturma

Terminalde projeyi kurmak istediğiniz dizine gidin ve alttaki komutu çalıştırınız. (Bendeki dizin ~/IdeaProjects)

lein new app clj-web-app

Dependencies (Bağımlılıklar)

İşlem bittikten sonra Leiningen birçok dosya ve klasör oluşturacaktır, project.clj dosyasını açıp görseldeki gibi eklemeleri yapalım.

  • Ring, Clojure için HTTP server abstraction sağlıyor içinde Jetty Adaptörü ile birlikte geliyor. (Tabii Jetty yerine istediğiniz Web sunucusunu kullanabilirsiniz.)
  • Patika, Routing ve RESTful yapısı sağlayan bir kütüphane. …


At Pisano, we build a sophisticated customer experience solution for organizations. Since our motto is speed and reliability, we choose robust, scalable and productive tools to build the platform, so this is where Clojure comes into play.

Clojure is a functional programming language (a Lisp dialect), that runs on JVM (Java Virtual Machine), CLR (Common Language Runtime) and JavaScript (ClojureScript) platforms.

Choosing Clojure

Before I joined the team, there were only 2 team members with professional Clojure experience. …


Clojure Hakkında

Clojure, Lisp’in bir türevi olan fonksiyonel programlama dilidir. JVM (Java Virtual Machine), CLR (Common Language Runtime) ve JavaScript platformlarında çalışabilmektedir.

Clojure Seçimi

Teknik ekipte sadece 2 kişi daha önceden Clojure tecrübesine sahipti. Radikal ve cesur bir kararla Dashboard’umuzu ClojureScript (Clojure’un JavaScript üstünde çalışan versiyonu) ile yeniden yazmaya karar verdik. Bu da ekibin sıfırdan yeni bir dil ve platform öğrenmesi demekti fakat biz bu riski aldık ve yola koyulduk.


Hepimizin son zamanlarda çokça duyduğu bir programlama paradigması olan fonksiyonel programlama aslında uzun yıllardır hayatımızda.

  • imperative (1957, Fortran)
  • functional (1958, Lisp)
  • object-oriented (1972, Smalltalk)
  • logic (1972, Prolog)

Lisp’in ortaya çıkmasıyla hayatımıza giren bu paradigma beraberinde birçok yeniliği getirmiştir. Güncel makalelerin aksine, bu paradigmayı size daha farklı bir bakış açısıyla anlatmaya çalışacağım.

Şu terimlere daha aşina olduğumuz söylenebilir; imperative diller “How? (Nasıl)” , functional diller ise “What? (Ne)” ile ilgileniyorlar fakat nedir bu söylenilmek istenilen?

Ufak bir örnek verelim, örneğin bir kişinin bizim için çilekli pasta yapmasını istiyoruz ona functional ve imperative şekilde komutlarımızı verelim.

İlk olarak imperative yaklaşımı ele alalım…


Clojure JVM(Java Virtual Machine), CLR(Common Language Runtime) ve JavaScript platformları üzerinde çalışabilen fonksiyonel bir Lisp programlama dili türüdür.

Uzun bir süredir aklımda Lisp’i öğrenmek vardı. Bunun sebebi ise üniversitede Chris Stephenson Hocam’dan aldığım bazı derslerde, kendisinin Racket(bir Lisp dialekti) dili üzerinden dersi işlemesi ve fonksiyonel programlamayla ilgili kuvvetli söylemlerinin yölendirmesidir. Bütün bunlar beni Lisp dilini araştırma konusunda düşünmeye sevk etti.

Ardından uzunca bir araştırmayla Lisp kullanan insanların internette tecrübelerini okudum/izledim ve bütün bu araştırlamalarımın bana en ilginç gelen yanı ise bu kişilerin dile karşı bir tür gizli uzay teknolojisiymiş tarzı yaklaşımları oldu.

Paul Graham adlı abimizin Lisp ile olan deneyimleri…

Ertuğrul Çetin

Clojure Developer who likes to make and break things.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store