İnternet Tabanlı Programlama Dersi 8. Ünite Özet
Ruby Ve Ruby On Rails
- Özet
- Sorularla Öğrenelim
Giriş
Ruby yüksek okunabilirliğe sahip olması, esnek kod yazmaya imkân tanıması, kolaylıkla genişletilebilmesi, platform bağımsız olması gibi pek çok nedenden ötürü günümüzün popüler dilleri arasında yer almaktadır. Tüm bunların yanı sıra Ruby dilinin popülerliğini kazanmasındaki asıl itici gücün Ruby on Rails çatısı olduğu da su götürmez bir gerçektir. 2000’li yılların başında diğer dillerle oluşturulması günler alabilecek bir uygulamanın, Ruby on Rails ile sadece on beş dakika içerisinde tamamlanabiliyor olması pek çok yazılım geliştiricinin bu dile geçiş yapmasına neden olmuştur.
İnsan Faktörü Prensibi: Matz’in diğer dillerle ilgili en çok yakındığı nokta: bu dilleri kullanan programcıların, özellikle bilgisayar mühendislerinin, program yazarken işlevsellik yerine makinenin daha hızlı ve verimli çalışmasına odaklanmalarıydı. Bunu yaparken insan faktörü sürekli göz ardı ediliyordu. Halbuki bizler, bilgisayar programlarının büyük bir bölümünü insanlarla etkileşim halinde olması için tasarlamaktayız. Bu nedenle programlama dilleri makineden çok insan faktörü düşünülerek tasarlanmalıdır. Matz bunu şu ifadeyle açıkça dile getirmektedir: “Onlar (bilgisayarlar) köle, bizler efendiyiz.
Asgari Sürpriz Prensibi: Bilgisayar bilimleri haricinde başka alanlarda da uygulaması bulunan bu prensip gereği bir işlemin sonucu tahmin edilebilir, açık ve tutarlı olmalıdır. Matz bu durumu birkaç cümlede şöyle ifade etmektedir: “İnsanlar program yazarken programlama dili ile savaşmak yerine kendilerini ifade etmek isterler. Bu nedenle programlama dilleri, programcılara doğal görünmelidir. Ben, Ruby’i tasarlarken sürprizleri en aza indirgemeye çalıştım ve bundaki amacım program yazarken harcanan eforu en aza indirgemekti.”.
Özgürlük ve Rahatlık Prensibi: Yazılım geliştiricilerin geçmişte farklı programlama dillerini kullanmış olmaları, farklı metodolojileri benimsemeleri ve hatta farklı kültürlerden gelmeleri gayet olağan bir durumdur. Tüm bunlardan dolayı her programcının kendine has sorun çözme yöntemlerinin olması da kaçınılmazdır. Bu durumu göz önünde bulunduran Ruby, programcıların kendilerini özgür ve rahat hissetmeleri adına çoğu zaman alternatif yollar sunar.
Maksimum Eğlence Prensibi: Program yazmanın genelde zor ve sıkıcı bir iş olduğu söylenir. Halbuki hepimizin diğer hayat amaçlarının yanı sıra eğlenmeye de ihtiyacının olduğunu söyleyebiliriz. Ruby programcının sıkıcı işlemler ile uğraşmak yerine sadece o anda yapılması gereken asıl işe odaklanabilmesine imkan tanır. Diğer dillerde satırlarca ifade ile yaptığınız bir işlemi Ruby ile bir veya iki satırda halledebilirsiniz.
Tamamen nesne yönelimli bir dildir: Ruby, tamamen nesne yönelimli bir dil olarak tasarlanmıştır. Ruby içerisinde her şey bir nesnedir ve kendisine ait özellikleri ve metotları bulunmaktadır. Programcının fazladan bir şeyler yapmasına gerek duyulmadan “sarmalama” ilkesinin gereği olarak nesnelere ait özelliklerin ve metotların dış ortamdan gizlenmesine imkân tanır.
Çok sayıda programlama paradigmasını destekler: Ruby nesne yönelimli özelliklerinin yanında fonksiyonel, zorunlu (imperatif) ve yansıtıcı (reaktif) programlama paradigmalarını da destekleyen bir yapıya sahiptir.
Yorumlanan bir dildir: Yorumlanan programlama dillerinde yazılmış olan bir kodun çalıştırılması bilgisayarda yer alan yorumlayıcı adında bir yazılım sayesinde gerçekleştirilir. Bu yazılım derlenen dillerin aksine kodumuzun tamamını tek seferde makine diline dönüştürmek yerine; bu dönüştürme işlemini satır satır gerçekleştirmektedir.
Platform bağımsız bir dildir: Yorumlanan dillerin en büyük artılarından birisi de makine kodunun çalışma zamanında oluşturulması sayesinde herhangi bir platforma bağlı kalma zorunluluğunun ortadan kalkmasıdır. Yani Ruby hemen hemen tüm platformlarda sorunsuz çalışabilmektedir.
Dinamik ve güçlü tiplemeli bir dildir: Ruby çalışma zamanında değişkenlerin tipini kendi başına belirleyebilmektedir. Böylece herhangi bir tip tanımlamasına ihtiyaç duyulmamaktadır. Ayrıca programın çalışması sırasında bir değişkene atanan değer veya bir metodun geriye döndürdüğü değer gibi tipler de değiştirilebilir.
Temiz ve test edilebilir kod yazmayı destekler.
Meta-programlama sayesinde çalışma zamanında kod üretimine (kod yazan kodlar oluşturmaya) imkân tanır.
Ruby Dili Söz Dizimi Ve Bileşenleri
Ruby ile birlikte program yazabilmek için Ruby yorumlayıcısına ihtiyacımız olacaktır. Daha önce bahsettiğimiz gibi Ruby platform bağımsız bir dil olduğundan Windows, MAC OS, Linux gibi en çok tercih edilen işletim sistemlerinin yanı sıra NEWS-OS, SunOS, AIX, SVR4, Solaris, NEC UPUX, NeXTSTEP gibi pek fazla bilinmeyen işletim sistemleri tarafından da çalıştırılabilmektedir. Ayrıca Windows Phone, Symbian OS gibi mobil platformlar için kullanılabilecek versiyonları da mevcuttur.
Ruby kodunu çalıştırmak için komut satırı üzerinden Ruby Yorumlayıcısını (MRI) veya Etkileşimli Ruby (IRB) yazılımını kullanabiliriz.
Ruby dilinin söz dizimine ilişkin temel kuralları şöyle özetleyebiliriz:
- Bir Ruby programı art arda gelen ifadelerden oluşur. İfadeleri birbirinden ayırmak için yeni satır veya noktalı virgül karakteri kullanılabilir. Bir ifade birden fazla satıra bölünmek istenirse; bir önceki satır +, - gibi sağ taraftaki operandı eksik bir metot ile ya da ters bölü (\) karakteri ile bitirilebilir.
- Boşluk karakterleri (space, tab gibi) sadece metin türünden verilerin içerisinde yer aldıklarında önem arz ederler, bunun dışında Ruby bu karakterleri görmezden gelir.
- Diyez (#) karakteri ile başlayan metinler o satırın sonuna kadar, =begin ve =end ifadeleri arasında yer alan satırlar ise tamamıyla yorum satırlarıdır ve Ruby yorumlayıcısı tarafından görmezden gelinir.
- Değişken, metot veya sabitler gibi belirteçler büyük-küçük harf duyarlıdır. Yani; AOF ile aof tamamen farklı belirteçlerdir.
- Çeşitli amaçlarla Ruby dilinin kendisi tarafından kullanılan kelimelere anahtar kelimeler denir. Bu kelimeler değişken veya sabit isimleri olarak kullanılamaz.
- Parantez karakterlerinin kullanımı çoğu durumda isteğe bağlıdır. Bu özellik genellikle kodun daha doğal görünmesini sağlarken; bazı zorunlu durumlarda(örneğin aritmetiksel işlemlerdeki işlem önceliğinin ayarlanması gibi) ve karmaşıklık yaratabilecek hallerde kullanılması gereklidir.
Değişkenleri birtakım verileri isimlendirmek ve daha sonra bu isimle onlara erişmek için kullanmaktayız. Tüm veriler çeşitli veri tiplerinde (metin, sayı, vb.) bulunduklarından dolayı bazı programlama dillerinde bu verilerin hangi türden olduğunun belirtilmesi gereklidir.
Ruby dilinde kullanılan veri türlerini basit veri türleri (sayılar, metinler, semboller ve mantıksal) ve birleşik veri türleri (diziler ve sözlükler) olarak ikiye ayırabiliriz.
Sayılar: Ruby dilinde diğer pek çok dilde olduğu gibi temel olarak iki tür sayı bulunmaktadır: tamsayılar ve ondalık sayılar. Bu türlerin yanı sıra rasyonel sayılar, karmaşık sayılar gibi sıra dışı sayı türlerine de bütünleşik olarak destek sunulmaktadır. Ruby, sayılar ile birlikte kullanabileceğimiz pek çok metot sunmaktadır.
Metotlar: Metotlar nesne yönelimli programlamada oldukça önemli bir yere sahip olmalarının yanında, NYP kullanılmasa dahi programlarımızda aynı kod bloğunu olduğu gibi veya farklı parametrelerle bir defadan fazla çalıştırmamız gerektiğinde de oldukça kullanışlı yapılar olarak karşımıza çıkmaktadır. Ruby’de metot tanımlamaları def anahtar kelimesi ile başlar ve end anahtar kelimesi ile biter.
Ruby’e özgü özelliklerden birisi de bazen metotların son karakterlerinin onlar hakkında fazladan bilgi içerebilmesidir. Örneğin daha önce öğrendiğimiz metinlerle birlikte kullanılan capitalize metodunu ele alalım. Bu metot ilgili metnin ilk harfini büyütüp, diğer harerini küçültmekte, bu şekilde elde ettiği yeni metni ise metodun geriye dönüş değeri olarak kullanmaktadır. Ancak bu işi yaparken orijinal metin nesnesi üzerinde herhangi bir değişiklik yapmamaktadır. Bir diğer metot son eki ise “?” karakteridir. Bir metot isminin son harfinin “?” olması; bu metodun geriye true veya false bir değer döndürdüğü anlamına gelmektedir.
Bloklar: Bloklar, ruby içerisinde oldukça sık kullanılan yapılardır. Blokları isimsiz metotlar olarak düşünebiliriz ki; metotlarda olduğu gibi bu yapıları da genellikle aynı işlemin tekrarlanması veya farklı bir noktada kullanılması amacıyla kullanmaktayız. Bununla birlikte bir bloğun tek başına kullanımı sık karşılaşabileceğimiz bir durum değildir. Ruby içerisinde bloklar, bir metoda parametre olarak gönderilmekte ve çalışmaları sağlanmaktadır.
Ruby ile geliştirilen uygulamalara ekstra özellikler ve işlevsellik katmak amacıyla kullandığımız paketlere “gem” adını vermekteyiz. Bu paketleri yönetmek için kullandığımız uygulamaya ise RubyGems denilmektedir.
Ruby On Rails Çatısı
Ruby on Rails Ruby dili ile geliştirilmiş bir web uygulama geliştirme çatısıdır (framework). İnternet tabanlı uygulamalarda ihtiyaç duyulabilecek şeylere ilişkin varsayımlar kullanarak, uygulamaların çok kısa sürede ve kolayca geliştirilmesine imkân tanımaktadır. Bu sayede az kodla, çok iş yapılması mümkün olmaktadır.
Rails felsefesi ya da daha çok bilinen ismiyle Rails yolu iki ana prensibi benimsemektedir:
- Kendi Kendini Tekrarlama: DRY(Don’t Repeat Yourself) olarak bilinen bu prensip; her bilgi parçasının bir sistem içerisinde tek, kesin ve güvenilir bir ifadesinin olması gerektiğini savunmaktadır. Aynı bilginin tekrar tekrar yazılmıyor olması kodumuzun daha yönetilebilir, esnek ve az hatalı hale gelmesini sağlayacaktır.
- Konfigürasyon Üzerine Kabuller: Rails, bir web uygulamasında gerekli olan pek çok şeyi yapmak için kullanılabilecek en iyi yolun hangisi olduğuna ilişkin fikirlere sahiptir ve bunu varsayılan olarak sunmaktadır. Bu sayede programcılar, sonsuz konfigürasyon ayarlamaları ile uğraşmak yerine; ya hiç ya da çok az değişikliğe ihtiyaç duyacaklardır.
Ruby On Rails İle Uygulama Geliştirme
Rails paketini yüklediğimizde, terminal üzerinden kullanabileceğimiz kendisiyle aynı isimli bir aracı da yüklemiş olduk. Rails ile birlikte çalışırken çoğu zaman kendimizi bu aracı kullanırken bulacağız ve uygulamamızın ilk adımından son adımına kadar pek çok eylemi bu komutu kullanarak gerçekleştireceğiz. Bu aracın kullanımı hakkında daha fazla bilgi sahibi olmak isterseniz terminalde “rails --help” komutunu çalıştırmayı deneyebilirsiniz.