Yaklaşık olarak 15 yıldır aktif olarak yazılım geliştirme işinde yer alıyorum. Son 4 yıldır ise bir bankanın kurumsal çözümlerinde çalışıyorum. Tüm yazılım hayatım boyunca ağırlıklı olarak .Net platformu üzerinde çalıştım. Zaman ilerledikçe sürekli olarak aynı şeylerle uğraşmanın beni paslandırdığını gördüm. İçimdeki araştırmacı kişiliği uyandıracak beni tekrardan keyiflendirecek bir şeyler gerekiyordu. Sonuç olarak çok sıkıldığım bir günün devamında yeni ne öğrenebilirim diye araştırmaya karar verdim. Daha önceden Java ile ilgili bir maceram olmuş ve 24 bölümlük bir makale serisi hazırlayabilmiştim. O zamanlar epeyce keyif alıyordum. Bu kez düşünce yapım biraz daha farklıkaştı. Çocuklara nasıl programlama öğretilebilir fikrinden yola çıktım. İlk iş bir Lego yapmaktı.ve devamı geldi...
3. I wanted to minimize my frustration during
programming, so I want to minimize my effort in
programming. That was my primary goal in
designing Ruby. I want to have fun in
programming myself.
Yukihiro (Matz) Matsumoto
5. say "Hello World!"
Perl
(print "Hello world")
Lisp
with Ada.Text_IO;
procedure Hello is
begin
Ada.Text_IO.Put_Line("Hello, world!");
end Hello;
ADA
class
HELLO_WORLD
create
make
feature
make
do
print ("Hello, world!%N")
end
end
SmallTalk
8. Ruby, her kesimden insana
programlama mantığını eğlenceli
şekilde öğretebilmek için ideal
bir dildir.
9.
10. Kullanım Alanları
• Büyük metinsel içeriklerin sorgulanması(Güçlü Regex desteği)
• CGI Programlama
• Network operasyonları
• XML işleme
• Prototip geliştirme
• Bilimsel araştırmalar
• Paralel programlama
• Service odaklı yaklaşımlar
• Domain Specific çözümler
• vb
11. Geniş Platform Desteği
• Windows, Linux, MaxOS, Symbion OS, Solaris, BSD, OS X, Windows
Phone, Windows CE, BEOS, IBM i, DOS ve hatta
IRB ekranını temizlemek için system 'cls‘ yazılabilir
Ruby’ ye nasıl heves ettim?
http://www.ruby-lang.org/
Yaklaşık olarak 15 yıldır aktif olarak yazılım geliştirme işinde yer alıyorum. Son 4 yıldır ise bir bankanın kurumsal çözümlerinde çalışıyorum. Tüm yazılım hayatım boyunca ağırlıklı olarak .Net platformu üzerinde çalıştım. Zaman ilerledikçe sürekli olarak aynı şeylerle uğraşmanın beni paslandırdığını gördüm. İçimdeki araştırmacı kişiliği uyandıracak beni tekrardan keyiflendirecek bir şeyler gerekiyordu. Sonuç olarak çok sıkıldığım bir günün devamında yeni ne öğrenebilirim diye araştırmaya karar verdim. Daha önceden Java ile ilgili bir maceram olmuş ve 24 bölümlük bir makale serisi hazırlayabilmiştim. O zamanlar epeyce keyif alıyordum. Bu kez düşünce yapım biraz daha farklıkaştı. Çocuklara nasıl programlama öğretilebilir fikrinden yola çıktım. İlk iş bir Lego yapmaktı ve devamı geldi...
Ruby, Japon bilgisayar ve yazılım uzmanı Yukihiro "Matz" Matsumoto tarafından geliştirilmiş bir programlama dilidir. Matz bu dili inşa ederken özellikle kolay yazılabilir ve aynı zamanda güçlü bir dil olmasına gayret etmiştir. Dilin felsefesini kendisi şu paragraf ile özetlemiştir.
Dili daha iyi tanıyabilmek için diğer karakteristik özelliklerine bakmamızda yarar var. Bunları temel olarak aşağıdaki maddeler halinde sıralayabiliriz.
Her şeyden önce nesne yönelimli(Object Oriented) bir dildir.
İngilizce dilbilgisine çok yakındır bu yüzden kolay okunur ve anlaşılırdır.
Yeri geldiğinde procedural veya fonksiyonel bir dil olarak kullanılabilir.
Dinamik bir programlama dildir.(Dynamic Programming Language)
Söz dizimi kolaylığı ve OOP gibi özellikleri sayesinde DSL(Domain Specific Language) geliştirilmesi kolaydır.
Meta programlama(Metaprogramming) yetenekleri içerir.
Wikipedia’ ya göre tüm karakteristik özellikleri
Thoroughly object-oriented with inheritance, mixins and metaclasses[42]
Dynamic typing and duck typing
Everything is an expression (even statements) and everything is executed imperatively (even declarations)
Succinct and flexible syntax[43] that minimizes syntactic noise and serves as a foundation for domain-specific languages[44]
Dynamic reflection and alteration of objects to facilitate metaprogramming[45]
Lexical closures, iterators and generators, with a unique block syntax[46]
Literal notation for arrays, hashes, regular expressions and symbols
Embedding code in strings (interpolation)
Default arguments
Four levels of variable scope (global, class, instance, and local) denoted by sigils or the lack thereof
Garbage collection
First-class continuations
Strict boolean coercion rules (everything is true except false and nil)
Exception handling
Operator overloading
Built-in support for rational numbers, complex numbers and arbitrary-precision arithmetic
Custom dispatch behavior (through method_missing and const_missing)
Native threads and cooperative fibers (fibers are 1.9/YARV feature)
Initial support for Unicode and multiple character encodings (no ICU support)[47]
Native plug-in API in C
Interactive Ruby Shell (a REPL)
Centralized package management through RubyGems
Implemented on all major platforms
Large standard library, including modules for YAML, JSON, XML, CGI, OpenSSL, HTTP, FTP, RSS, curses, zlib, and Tk[48]
Ruby geliştirilirken Ada, Eiffel, Lisp, Smalltalk, Perl gibi diller dikkate alınmıştır.
«Ruby’ de Hello World’ ü de buraya koyalım.»
Ruby ile yazılmış script’ leri çalıştırmak için Ruby Interpreter kullanılır. Ruby kodları basit text içerikleridir. C++, C# veya Java gibi dillerde kodlar öncelikle derlenir ve makine diline çevrilir.(.Net tarafında CLR, Java dünyasında JVM vb çalışma zamanı ortamları söz konusudur) Sonrasında çıktılar çalıştırılır. Ruby’ de ise kodu yazdığımız gibi çalıştırabiliriz. Script Interpreter tarafından anında yorumlanmaya başlanır.
Eğlenceli olduğu kadar üzerine oturtulan Rails çatısı sayesinde kurumsal web çözümleri de gerçekleştirilmektedir.
Quora' daki bilgilere göre GitHub ve Twitter, Ruby on Rails kullanmışlardır. Zaman içerisinde Sun Microsystems, Microsoft, Intel, IBM, Apple ve Amazon gibi büyük çaplı firmaların Ruby programlama dilini kullandığı belirtilmiştir.
Pek tabi kullanım alanları düşünüldüğünde özellikle bilimsel çalışmalar için de ideal olduğu ifade edilebilir. Güçlü Regex desteği sayesinde metinsel sorgulama ve işleme alanında, CGI programlamada, Network operasyonlarında, XML işlemede, prototipgeliştirmede yoğun bir şekilde kullanılmaktadır.
Desteklediği platform yelpazesi son derece geniştir. Windows, Linux, MacOs bir yana Java Symbion yüklü cihazlarda dahi programlama yapabileceğimiz ifade edilmektedir. Hatta kaynaklara göre Amiga üzerinde bile Ruby kodlaması yapılabilinir. (Bunu denemek istiyorum gerçekten de.)
Not : Aslında Amiga tarafında oldukça geniş bir dil desteği varmış. https://en.wikipedia.org/wiki/Amiga_programming_languages
Örnek kodlara https://github.com/buraksenyurt/rubyworks/tree/master/lesson1 github adresinden ulaşabilirsiniz.
Ruby ile hemen kodlamaya başlanabilir. Kodu yazın , rb uzantılı kaydedin, Ruby Interpreter ile yürütün. Ya da anında sonuçları görmek mi istiyorsunuz? Interactive Ruby aracını kullanabilirsiniz.
10.times do puts "Hello Rubyist:)" end
3.times{puts "Ola!"}
Ruby dilinde her şey bir nesnedir.
puts 3.14.class
puts true.class
puts Math::PI.class
puts "Merhaba".class
puts 1000000000000000000000000000000000000.class
class String
def KarizmatikYaz
newWord=""
self.split("").each{|c|newWord<<c<<" "}
newWord.chop
end
end
puts "What is your name?"
mesaj=gets
karizmaStayla=mesaj.KarizmatikYaz
puts karizmaStayla
def Hesapla(x,y)
return x+y,x*y,x-y,x/y
end
a,b,c,d=Hesapla 6,2
puts a,b,c,d
def Faktoryel(sayi)
if sayi==0
1
else
sayi*Faktoryel(sayi-1)
end
end
puts "number?"
number=gets.to_i
f=Faktoryel(number)
puts f
Class örneği şöyle geliştirilmeye başlanır. Birinci adımda,
class Product def initialize(id,title) @id=id @title=title endendsonrasında «ah ekrana nasıl bastıracağız peki denir ve to_s metodu ezilir»
class Product
def to_s
«(#{@id})-#{@title}»
end
end
ve bir örnek oluşturulur.
book=Product.new(10,»Fareler ve insanlar»)
puts book.to_s
Sonrasında aşağıdaki komple sınıf örneği gösterilebilir.
class Product
attr_accessor:Name
attr_accessor:ListPrice
attr_reader:ID
def Category=(value)
@category=value
end
def Id
@ID
end
def initialize(name,listPrice,category)
@Name=name
@ID=10001
@category=category
@ListPrice=listPrice
end
def to_s
"#{@ID}#{@Name}-#{@ListPrice}(#{@category})"
end
end
cmp=Product.new "Computer",1200,"IT"
puts cmp.to_s
puts cmp.ID
cmp.Category="Computer«
puts cmp.to_s
total=0
[1,3,5,7,9].each{ |i| total+=(i*2) }
puts total
total=0
(1..100).each{|n|toplam+=n}
puts total
total=0(-100..-1).each{|n|toplam+=n*2}
puts total
def topla(*sayilar) # Variable-Length arguments kullanımı #0
toplam=0
sayilar.each{|s| toplam+=s}
return toplam
end
puts topla 1,2,5,6
year=1972
puts case year
when 1970..1979
"Seventies"
when 1980..1989
"Eighties"
when 1990..1999
"Nineties"
end
// Ornek var olan kod parçasından gösterilir.
# Simple REST service
require 'sinatra'
require 'json'
#list all products
get '/products' do
m=Main.new
m.products.to_json
end
class Main
attr_accessor :products
def initialize
@products=Array.new(2)
@products[0]=Product.new(1001,"Kral Katili Guncesi 1")
@products[1]=Product.new(1002,"Kral Katili Guncesi 2")
end
end
class Product
attr_accessor:id
attr_accessor:name
def initialize(id,name)
@id=id
@name=name
end
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {"id" => @id, "name" => @name}
}.to_json(*a)
end
def self.json_create(object)
new(object["data"]["id"], object["data"]["name"])
end
def to_s
"#{@id}-#{@name}"
end
end
# Sayi Tahmin oyunu
# Yazan : Burak Selim Senyurt
puts "Merhaba. Sayi tahmin oyununa hos geldin.\nBana adini soyler misin"
name=gets
puts "Hosgeldin #{name.upcase}\nHaydi baslayalim."
isGuessed=false
nmbr=rand(100)+1
puts "1 ile 100 arasinda bir sayi tuttum. Bakalim bilebilecek misin"
guessCount=0
until guessCount==10 || isGuessed
puts "Tahmin ettigin sayigi girer misin"
yourGuess=gets.to_i
guessCount+=1
if yourGuess>nmbr
puts "Yuksek bir sayi soyledin"
elsif yourGuess<nmbr
puts "Dusuk bir sayi soyledin"
elsif yourGuess==nmbr
puts "Bravo #{name} ! #{guessCount} seferde bildin"
isGuessed=true
end
end
unless isGuessed
puts "Uzgunum ama sayiyi bulamadin. Tuttugum sayi #{nmbr} idi"
end
Ruby ile ilgili sıkça sorulan sorular için http://ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html adresine bakabilirsiniz.