SlideShare a Scribd company logo
1 of 24
Bir .Net Geliştiricisinin
Ruby ile İmtihanı
Burak Selim Şenyurt
Kıdemli Yazılım Danışmanı
www.buraksenyurt.com
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
Object
Oriented
DSL
High
Readability
Procedural
Functional
dynamic
Meta
Programming
Open
Source
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
App1.java
…
…
…
…
…
…
10100101
00111010
11000110
Compiler
10100101
00111010
11000110
Compiled Code
Virtıal
Machine
Execute
Derleyici Odaklı Yaklaşım
Program.rb
…
…
…
Ruby
Interpreter
Execute
Ruby Yaklaşımı
Ruby, her kesimden insana
programlama mantığını eğlenceli
şekilde öğretebilmek için ideal
bir dildir.
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
Geniş Platform Desteği
• Windows, Linux, MaxOS, Symbion OS, Solaris, BSD, OS X, Windows
Phone, Windows CE, BEOS, IBM i, DOS ve hatta
Hello World
Örneklerle Ruby
programlama dilini
tanıyalım.
https://github.com/buraksenyurt/
rubyworks/tree/master/lesson1
10 Times Hello World
Her Şey Nesne!
Tip Genişletmek
Monkey Patching
Çoklu Atamalar
class
Somethings
Sinatra
ve HTTP
Get
FAQ
Bir .Net Geliştiricisinin Ruby ile İmtihanı

More Related Content

Viewers also liked

Ruby Programlama Dili
Ruby Programlama DiliRuby Programlama Dili
Ruby Programlama Dilipinguar
 
Finans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekFinans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekBurak Selim Şenyurt
 
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleCloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleBenjamin Zores
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsBenjamin Zores
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)kyasar
 
Design Of A Usb Device Driver (Overview)
Design Of A Usb Device Driver (Overview)Design Of A Usb Device Driver (Overview)
Design Of A Usb Device Driver (Overview)allankliu
 

Viewers also liked (20)

Ruby Programlama Dili
Ruby Programlama DiliRuby Programlama Dili
Ruby Programlama Dili
 
Finans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekFinans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı Olabilmek
 
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleCloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)
 
Design Of A Usb Device Driver (Overview)
Design Of A Usb Device Driver (Overview)Design Of A Usb Device Driver (Overview)
Design Of A Usb Device Driver (Overview)
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
File systems for Embedded Linux
File systems for Embedded LinuxFile systems for Embedded Linux
File systems for Embedded Linux
 
Embedded Linux - Building toolchain
Embedded Linux - Building toolchainEmbedded Linux - Building toolchain
Embedded Linux - Building toolchain
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
Linux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platformLinux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platform
 
Yazılım Kalitesi
Yazılım KalitesiYazılım Kalitesi
Yazılım Kalitesi
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
 
Data Structures & Algorithm design using C
Data Structures & Algorithm design using C Data Structures & Algorithm design using C
Data Structures & Algorithm design using C
 
Embedded Android : System Development - Part I
Embedded Android : System Development - Part IEmbedded Android : System Development - Part I
Embedded Android : System Development - Part I
 
Embedded C - Optimization techniques
Embedded C - Optimization techniquesEmbedded C - Optimization techniques
Embedded C - Optimization techniques
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
Embedded C
Embedded CEmbedded C
Embedded C
 
Communication Protocols (UART, SPI,I2C)
Communication Protocols (UART, SPI,I2C)Communication Protocols (UART, SPI,I2C)
Communication Protocols (UART, SPI,I2C)
 

Similar to Bir .Net Geliştiricisinin Ruby ile İmtihanı

Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri TanıtımAtilla Özgür
 
Ruby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliRuby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliSerdar Dogruyol
 
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAY
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAYProgramlama Dili Olarak JAVA - Muhammet ÇAĞATAY
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAYMuhammet ÇAĞATAY
 
Mikroprogramlanmis kontrol
Mikroprogramlanmis kontrolMikroprogramlanmis kontrol
Mikroprogramlanmis kontrolAykut Gündoğdu
 
C ders-notlari-necati-ergin
C ders-notlari-necati-erginC ders-notlari-necati-ergin
C ders-notlari-necati-erginIbrahim Kizir
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYusuf AYTİN
 

Similar to Bir .Net Geliştiricisinin Ruby ile İmtihanı (7)

Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
Ruby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliRuby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama Dili
 
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAY
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAYProgramlama Dili Olarak JAVA - Muhammet ÇAĞATAY
Programlama Dili Olarak JAVA - Muhammet ÇAĞATAY
 
Mikroprogramlanmis kontrol
Mikroprogramlanmis kontrolMikroprogramlanmis kontrol
Mikroprogramlanmis kontrol
 
C ders-notlari-necati-ergin
C ders-notlari-necati-erginC ders-notlari-necati-ergin
C ders-notlari-necati-ergin
 
Haydi Rails Yazalım
Haydi Rails YazalımHaydi Rails Yazalım
Haydi Rails Yazalım
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme Teknolojileri
 

More from Burak Selim Şenyurt

More from Burak Selim Şenyurt (16)

Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
 
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern MacerasıBeş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
 
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan KurtulmakMonolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
 
Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?
 
Kaosu Körüklemek
Kaosu KörüklemekKaosu Körüklemek
Kaosu Körüklemek
 
Yazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar AtmakYazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar Atmak
 
Enterprise Applications
Enterprise ApplicationsEnterprise Applications
Enterprise Applications
 
NoSQL - Yazılımcı Bakışıyla
NoSQL - Yazılımcı BakışıylaNoSQL - Yazılımcı Bakışıyla
NoSQL - Yazılımcı Bakışıyla
 
Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
 
C# Akademi 2005
C# Akademi 2005C# Akademi 2005
C# Akademi 2005
 
Netron Techweek 2007 WCF
Netron Techweek 2007 WCFNetron Techweek 2007 WCF
Netron Techweek 2007 WCF
 
Yazilim Zirvesi 2008
Yazilim Zirvesi 2008Yazilim Zirvesi 2008
Yazilim Zirvesi 2008
 
C# 4.0 new features - innova
C# 4.0   new features - innovaC# 4.0   new features - innova
C# 4.0 new features - innova
 
Trakya Üniversitesi Workshop
Trakya Üniversitesi WorkshopTrakya Üniversitesi Workshop
Trakya Üniversitesi Workshop
 
Geleceğin Programıcısı
Geleceğin ProgramıcısıGeleceğin Programıcısı
Geleceğin Programıcısı
 
Tfs ile duzenli proje gelistirme
Tfs ile duzenli proje gelistirmeTfs ile duzenli proje gelistirme
Tfs ile duzenli proje gelistirme
 

Bir .Net Geliştiricisinin Ruby ile İmtihanı

Editor's Notes

  1. IRB ekranını temizlemek için system 'cls‘ yazılabilir
  2. 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...
  3. 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.
  4. 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]
  5. Ruby geliştirilirken Ada, Eiffel, Lisp, Smalltalk, Perl gibi diller dikkate alınmıştır. «Ruby’ de Hello World’ ü de buraya koyalım.»
  6. 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.
  7. Eğlenceli olduğu kadar üzerine oturtulan Rails çatısı sayesinde kurumsal web çözümleri de gerçekleştirilmektedir.
  8. 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.
  9. 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.
  10. 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
  11. Örnek kodlara https://github.com/buraksenyurt/rubyworks/tree/master/lesson1 github adresinden ulaşabilirsiniz.
  12. 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.
  13. 10.times do puts "Hello Rubyist:)" end 3.times{puts "Ola!"}
  14. Ruby dilinde her şey bir nesnedir. puts 3.14.class puts true.class puts Math::PI.class puts "Merhaba".class puts 1000000000000000000000000000000000000.class
  15. 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
  16. 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
  17. 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
  18. Class örneği şöyle geliştirilmeye başlanır. Birinci adımda, class Product def initialize(id,title) @id=id @title=title end end sonrası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
  19. 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
  20. // 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
  21. # 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
  22. Ruby ile ilgili sıkça sorulan sorular için http://ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html adresine bakabilirsiniz.