{"id":35980,"date":"2025-12-06T10:40:55","date_gmt":"2025-12-06T07:40:55","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35980"},"modified":"2025-12-06T10:40:55","modified_gmt":"2025-12-06T07:40:55","slug":"ilk-ruby-programinizi-nasil-yazarsiniz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/","title":{"rendered":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?"},"content":{"rendered":"<p><body><\/p>\n<h2>\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?<\/h2>\n<p>Ruby, zarif s\u00f6zdizimi ve geli\u015ftirici verimlili\u011fini \u00f6n planda tutan a\u00e7\u0131k kaynakl\u0131, dinamik bir programlama dilidir. Japon bilgisayar bilimcisi Yukihiro &#8220;Matz&#8221; Matsumoto taraf\u0131ndan 1990&#8217;lar\u0131n ortalar\u0131nda tasarlanan Ruby, &#8220;geli\u015ftiricinin en iyi arkada\u015f\u0131&#8221; olma felsefesiyle yola \u00e7\u0131km\u0131\u015ft\u0131r. Python ve Perl gibi dillerden ilham alarak, g\u00fc\u00e7l\u00fc bir nesne y\u00f6nelimli yap\u0131ya sahip, okunabilir ve do\u011fal bir dil yaratma amac\u0131 g\u00fcd\u00fclm\u00fc\u015ft\u00fcr. Bu makalede, Ruby&#8217;nin temellerini atacak, kurulumdan ba\u015flayarak ilk Ruby program\u0131n\u0131z\u0131 yazma s\u00fcrecini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. E\u011fer programlamaya yeni ba\u015fl\u0131yor veya farkl\u0131 bir dilden Ruby&#8217;ye ge\u00e7i\u015f yap\u0131yorsan\u0131z, bu rehber size sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sunacakt\u0131r.<\/p>\n<p>Ruby&#8217;nin pop\u00fclaritesi, \u00f6zellikle web geli\u015ftirme \u00e7er\u00e7evesi Ruby on Rails sayesinde b\u00fcy\u00fck \u00f6l\u00e7\u00fcde artm\u0131\u015ft\u0131r. Ancak Ruby&#8217;nin kullan\u0131m alanlar\u0131 sadece web ile s\u0131n\u0131rl\u0131 de\u011fildir; komut dosyalar\u0131, veri analizi, otomasyon ve hatta oyun geli\u015ftirme gibi bir\u00e7ok farkl\u0131 alanda da kendine yer bulur. Bu \u00e7ok y\u00f6nl\u00fcl\u00fck, Ruby&#8217;yi \u00f6\u011frenmeye de\u011fer k\u0131lan \u00f6nemli \u00f6zelliklerden biridir.<\/p>\n<p>Bu makalede, Ruby&#8217;yi bilgisayar\u0131n\u0131za nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel s\u00f6zdizimi kurallar\u0131n\u0131, de\u011fi\u015fkenleri, veri tiplerini, kontrol ak\u0131\u015f\u0131n\u0131 ve metotlar\u0131 ele alaca\u011f\u0131z. Ard\u0131ndan, basit &#8220;Merhaba D\u00fcnya&#8221; program\u0131ndan ba\u015flayarak, kullan\u0131c\u0131 etkile\u015fimli ve daha karma\u015f\u0131k programlar yazma prati\u011fi yapaca\u011f\u0131z. Son olarak, yazd\u0131\u011f\u0131n\u0131z programlar\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 ve olas\u0131 hatalarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frenecek, Ruby yolculu\u011funuzda size rehberlik edecek sonraki ad\u0131mlar\u0131 tart\u0131\u015faca\u011f\u0131z.<\/p>\n<h3>Ruby&#8217;yi Ortam\u0131n\u0131za Kurma<\/h3>\n<p>Ruby ile programlamaya ba\u015flamadan \u00f6nce, Ruby yorumlay\u0131c\u0131s\u0131n\u0131 bilgisayar\u0131n\u0131za kurman\u0131z gerekir. Kurulum s\u00fcreci, kulland\u0131\u011f\u0131n\u0131z i\u015fletim sistemine g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir.<\/p>\n<h4>\u0130\u015fletim Sisteminize G\u00f6re Kurulum<\/h4>\n<p>Ruby kurulumu i\u00e7in birden fazla y\u00f6ntem bulunmaktad\u0131r. En yayg\u0131n ve \u00f6nerilen y\u00f6ntemleri a\u015fa\u011f\u0131da bulabilirsiniz.<\/p>\n<h5>Windows<\/h5>\n<p>Windows kullan\u0131c\u0131lar\u0131 i\u00e7in en kolay ve \u00f6nerilen y\u00f6ntem RubyInstaller kullanmakt\u0131r.<\/p>\n<p>1.  <strong>RubyInstaller \u0130ndirme<\/strong>: RubyInstaller web sitesine (rubyinstaller.org) gidin. &#8220;With Devkit&#8221; s\u00fcr\u00fcm\u00fcn\u00fc indirmeniz \u00f6nerilir. Devkit, Ruby gem&#8217;lerinin (paketlerinin) C veya C++ uzant\u0131lar\u0131 gerektirenlerini derlemek i\u00e7in gerekli ara\u00e7lar\u0131 i\u00e7erir.<br \/>\n2.  <strong>Kurulum Sihirbaz\u0131<\/strong>: \u0130ndirdi\u011finiz <code>.exe<\/code> dosyas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n. Kurulum sihirbaz\u0131ndaki talimatlar\u0131 takip edin.<br \/>\n    *   Lisans s\u00f6zle\u015fmesini kabul edin.<br \/>\n    *   Kurulum konumunu se\u00e7in (varsay\u0131lan genellikle iyidir).<br \/>\n    *   \u00d6nemli: &#8220;Add Ruby executables to your PATH&#8221; (Ruby \u00e7al\u0131\u015ft\u0131r\u0131labilir dosyalar\u0131n\u0131 PATH&#8217;inize ekle) se\u00e7ene\u011fini i\u015faretledi\u011finizden emin olun. Bu, komut istemcisinden Ruby komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r.<br \/>\n    *   Kurulum tamamland\u0131ktan sonra, Devkit kurulumu i\u00e7in bir se\u00e7enek sunulabilir. E\u011fer sunulursa, bunu da tamamlay\u0131n. Genellikle, komut istemcisinde <code>ridk install<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z istenir. Bu komut, Devkit bile\u015fenlerini kurar.<br \/>\n3.  <strong>Do\u011frulama<\/strong>: Komut istemcisini (Command Prompt veya PowerShell) a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak Ruby&#8217;nin ba\u015far\u0131yla kuruldu\u011funu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">ruby -v\n    irb<\/code><\/pre>\n<p>    <code>ruby -v<\/code> size kurulu Ruby s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6stermelidir. <code>irb<\/code> (Interactive Ruby) ise Ruby&#8217;nin etkile\u015fimli konsolunu ba\u015flatacakt\u0131r. <code>exit<\/code> yaz\u0131p Enter tu\u015funa basarak <code>irb<\/code>&#8216;den \u00e7\u0131kabilirsiniz.<\/p>\n<h5>macOS<\/h5>\n<p>macOS sistemlerinde genellikle \u00f6nceden y\u00fcklenmi\u015f bir Ruby s\u00fcr\u00fcm\u00fc bulunur. Ancak bu s\u00fcr\u00fcm genellikle eski olabilir ve sistem taraf\u0131ndan kullan\u0131ld\u0131\u011f\u0131 i\u00e7in g\u00fcncellemeleri veya de\u011fi\u015fiklikleri riskli olabilir. Bu nedenle, Ruby s\u00fcr\u00fcm y\u00f6neticileri (rbenv veya RVM) kullanmak \u015fiddetle tavsiye edilir. Bu y\u00f6neticiler, farkl\u0131 Ruby s\u00fcr\u00fcmlerini kolayca kurman\u0131za ve projeleriniz aras\u0131nda ge\u00e7i\u015f yapman\u0131za olanak tan\u0131r.<\/p>\n<p>Bu rehberde <code>rbenv<\/code> kullan\u0131m\u0131n\u0131 \u00f6nerece\u011fiz:<\/p>\n<p>1.  <strong>Homebrew Kurulumu (Gerekliyse)<\/strong>: E\u011fer Homebrew kurulu de\u011filse, Terminal&#8217;i a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak kurun:<\/p>\n<pre><code class=\"language-bash\">\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"<\/code><\/pre>\n<p>2.  <strong>rbenv Kurulumu<\/strong>: Homebrew kullanarak <code>rbenv<\/code>&#8216;i kurun:<\/p>\n<pre><code class=\"language-bash\">brew install rbenv ruby-build<\/code><\/pre>\n<p>    <code>ruby-build<\/code>, <code>rbenv<\/code>&#8216;in Ruby s\u00fcr\u00fcmlerini derlemesine yard\u0131mc\u0131 olan bir eklentidir.<br \/>\n3.  <strong>rbenv&#8217;i PATH&#8217;e Ekleme<\/strong>: <code>rbenv<\/code>&#8216;i kabu\u011funuza (shell) eklemeniz gerekir. Genellikle <code>.zshrc<\/code> (macOS Catalina ve sonras\u0131) veya <code>.bash_profile<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 eklemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">echo 'eval \"$(rbenv init -)\"' >> ~\/.zshrc\n    # veya\n    echo 'eval \"$(rbenv init -)\"' >> ~\/.bash_profile<\/code><\/pre>\n<p>    Dosyay\u0131 kaydettikten sonra Terminal&#8217;i yeniden ba\u015flat\u0131n veya <code>source ~\/.zshrc<\/code> (veya <code>.bash_profile<\/code>) komutunu \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n4.  <strong>Ruby Kurulumu<\/strong>: <code>rbenv<\/code> kullanarak istedi\u011finiz Ruby s\u00fcr\u00fcm\u00fcn\u00fc kurun (\u00f6rne\u011fin, en son kararl\u0131 s\u00fcr\u00fcm):<\/p>\n<pre><code class=\"language-bash\">rbenv install 3.2.2 # Veya g\u00fcncel en son s\u00fcr\u00fcm\n    rbenv global 3.2.2 # Bu s\u00fcr\u00fcm\u00fc varsay\u0131lan olarak ayarla<\/code><\/pre>\n<p>5.  <strong>Do\u011frulama<\/strong>: Terminal&#8217;i a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak Ruby&#8217;nin ba\u015far\u0131yla kuruldu\u011funu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">ruby -v\n    which ruby\n    irb<\/code><\/pre>\n<p>    <code>which ruby<\/code> komutu, <code>rbenv<\/code> taraf\u0131ndan y\u00f6netilen Ruby yolunu g\u00f6stermelidir (\u00f6rne\u011fin, <code>\/Users\/youruser\/.rbenv\/shims\/ruby<\/code>).<\/p>\n<h5>Linux<\/h5>\n<p>Linux da\u011f\u0131t\u0131mlar\u0131nda da macOS&#8217;e benzer \u015fekilde <code>rbenv<\/code> veya <code>RVM<\/code> kullan\u0131lmas\u0131 \u00f6nerilir. Da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n paket y\u00f6neticisi arac\u0131l\u0131\u011f\u0131yla Ruby kurmak m\u00fcmk\u00fcn olsa da, bu genellikle daha eski bir s\u00fcr\u00fcm sa\u011flar ve s\u00fcr\u00fcm y\u00f6netimi esnekli\u011fi sunmaz.<\/p>\n<p><code>rbenv<\/code> kurulumu i\u00e7in ad\u0131mlar macOS ile hemen hemen ayn\u0131d\u0131r:<\/p>\n<p>1.  <strong>Gerekli Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kurma<\/strong>: <code>rbenv<\/code> ve Ruby derlemesi i\u00e7in baz\u0131 ba\u011f\u0131ml\u0131l\u0131klar gerekebilir. Da\u011f\u0131t\u0131m\u0131n\u0131za g\u00f6re:<br \/>\n    *   <strong>Debian\/Ubuntu<\/strong>:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n        sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libffi-dev libgdbm-dev libncurses5-dev<\/code><\/pre>\n<p>    *   <strong>Fedora\/CentOS<\/strong>:<\/p>\n<pre><code class=\"language-bash\">sudo dnf install git curl openssl-devel readline-devel zlib-devel autoconf bison gcc-c++ libyaml-devel libffi-devel gdbm-devel ncurses-devel<\/code><\/pre>\n<p>2.  <strong>rbenv Kurulumu<\/strong>: <code>rbenv<\/code>&#8216;i Git ile klonlay\u0131n:<\/p>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/rbenv\/rbenv.git ~\/.rbenv\n    git clone https:\/\/github.com\/rbenv\/ruby-build.git ~\/.rbenv\/plugins\/ruby-build<\/code><\/pre>\n<p>3.  <strong>rbenv&#8217;i PATH&#8217;e Ekleme<\/strong>: <code>.bashrc<\/code> veya <code>.zshrc<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 ekleyin:<\/p>\n<pre><code class=\"language-bash\">echo 'export PATH=\"$HOME\/.rbenv\/bin:$PATH\"' >> ~\/.bashrc\n    echo 'eval \"$(rbenv init -)\"' >> ~\/.bashrc<\/code><\/pre>\n<p>    Dosyay\u0131 kaydettikten sonra Terminal&#8217;i yeniden ba\u015flat\u0131n veya <code>source ~\/.bashrc<\/code> (veya <code>.zshrc<\/code>) komutunu \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n4.  <strong>Ruby Kurulumu<\/strong>: <code>rbenv<\/code> kullanarak istedi\u011finiz Ruby s\u00fcr\u00fcm\u00fcn\u00fc kurun:<\/p>\n<pre><code class=\"language-bash\">rbenv install 3.2.2 # Veya g\u00fcncel en son s\u00fcr\u00fcm\n    rbenv global 3.2.2 # Bu s\u00fcr\u00fcm\u00fc varsay\u0131lan olarak ayarla<\/code><\/pre>\n<p>5.  <strong>Do\u011frulama<\/strong>: Terminal&#8217;i a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak Ruby&#8217;nin ba\u015far\u0131yla kuruldu\u011funu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">ruby -v\n    which ruby\n    irb<\/code><\/pre>\n<h4>Kod D\u00fczenleyici Se\u00e7imi<\/h4>\n<p>Ruby kodunuzu yazmak i\u00e7in bir kod d\u00fczenleyiciye ihtiyac\u0131n\u0131z olacak. \u0130yi bir kod d\u00fczenleyici, s\u00f6zdizimi vurgulama, otomatik tamamlama ve hata ay\u0131klama gibi \u00f6zelliklerle verimlili\u011finizi art\u0131r\u0131r.<\/p>\n<p>*   <strong>Visual Studio Code (VS Code)<\/strong>: En pop\u00fcler ve \u00e7ok y\u00f6nl\u00fc d\u00fczenleyicilerden biridir. \u00dccretsizdir ve Ruby geli\u015ftirme i\u00e7in bir\u00e7ok eklentiye (\u00f6rn. Ruby, Solargraph) sahiptir. Ba\u015flang\u0131\u00e7 i\u00e7in \u015fiddetle tavsiye edilir.<br \/>\n*   <strong>Sublime Text<\/strong>: H\u0131zl\u0131 ve hafif bir d\u00fczenleyicidir. Ruby deste\u011fi i\u00e7in paketler mevcuttur.<br \/>\n*   <strong>Atom<\/strong>: GitHub taraf\u0131ndan geli\u015ftirilen \u00fccretsiz ve a\u00e7\u0131k kaynakl\u0131 bir d\u00fczenleyicidir. \u00d6zelle\u015ftirilebilir ve Ruby i\u00e7in eklentiler sunar.<br \/>\n*   <strong>Vim\/Emacs<\/strong>: Deneyimli geli\u015ftiriciler i\u00e7in g\u00fc\u00e7l\u00fc, terminal tabanl\u0131 d\u00fczenleyicilerdir. \u00d6\u011frenme e\u011frisi y\u00fcksektir ancak \u00e7ok verimlidirler.<\/p>\n<p>Yeni ba\u015flayanlar i\u00e7in VS Code, kurulumu ve kullan\u0131m\u0131 kolay oldu\u011fu i\u00e7in ideal bir se\u00e7imdir.<\/p>\n<h3>Ruby&#8217;nin Temel Prensipleri ve S\u00f6z Dizimi<\/h3>\n<p>Ruby, nesne y\u00f6nelimli bir dil oldu\u011fu i\u00e7in, her \u015feyin bir nesne oldu\u011fu felsefesini benimser. Bu b\u00f6l\u00fcm, Ruby&#8217;nin temel yap\u0131 ta\u015flar\u0131n\u0131 ve s\u00f6zdizimini tan\u0131tacakt\u0131r.<\/p>\n<h4>Her \u015eey Bir Nesnedir<\/h4>\n<p>Ruby&#8217;de say\u0131lar, dizeler, hatta <code>true<\/code> ve <code>false<\/code> bile birer nesnedir. Bu, her de\u011ferin metotlara sahip oldu\u011fu anlam\u0131na gelir.<\/p>\n<pre><code class=\"language-ruby\">puts 1.class      #=> Integer\nputs \"hello\".class #=> String\nputs [1, 2, 3].class #=> Array\nputs true.class    #=> TrueClass<\/code><\/pre>\n<p>Bu \u00f6zellik, Ruby&#8217;nin tutarl\u0131 ve g\u00fc\u00e7l\u00fc nesne y\u00f6nelimli yap\u0131s\u0131n\u0131n temelidir.<\/p>\n<h4>Yorum Sat\u0131rlar\u0131<\/h4>\n<p>Yorum sat\u0131rlar\u0131, kodunuzu a\u00e7\u0131klamak ve daha okunabilir hale getirmek i\u00e7in kullan\u0131l\u0131r. Ruby&#8217;de iki t\u00fcr yorum sat\u0131r\u0131 vard\u0131r:<\/p>\n<p>*   <strong>Tek sat\u0131rl\u0131k yorum<\/strong>: <code>#<\/code> i\u015fareti ile ba\u015flar.<\/p>\n<pre><code class=\"language-ruby\"># Bu tek sat\u0131rl\u0131k bir yorumdur.\n    puts \"Merhaba\" # Bu da ayn\u0131 sat\u0131rda bir yorumdur.<\/code><\/pre>\n<p>*   <strong>\u00c7ok sat\u0131rl\u0131k yorum<\/strong>: <code>=begin<\/code> ile ba\u015flar ve <code>=end<\/code> ile biter.<\/p>\n<pre><code class=\"language-ruby\">=begin\n    Bu, birden fazla sat\u0131ra yay\u0131lan\n    bir yorum blo\u011fudur.\n    =end\n    puts \"D\u00fcnya\"<\/code><\/pre>\n<h4>De\u011fi\u015fkenler<\/h4>\n<p>De\u011fi\u015fkenler, de\u011ferleri depolamak i\u00e7in kullan\u0131l\u0131r. Ruby&#8217;de farkl\u0131 t\u00fcrde de\u011fi\u015fkenler bulunur:<\/p>\n<p>*   <strong>Yerel De\u011fi\u015fkenler<\/strong>: K\u00fc\u00e7\u00fck harfle veya alt \u00e7izgiyle ba\u015flayan de\u011fi\u015fkenlerdir (\u00f6rn. <code>ad<\/code>, <code>sayi_bir<\/code>). Metot veya blok i\u00e7inde tan\u0131mlan\u0131r ve yaln\u0131zca o kapsamda eri\u015filebilirler.<\/p>\n<pre><code class=\"language-ruby\">mesaj = \"Merhaba Ruby!\"\n    sayi = 10<\/code><\/pre>\n<p>*   <strong>\u00d6rnek De\u011fi\u015fkenleri<\/strong>: <code>@<\/code> i\u015faretiyle ba\u015flar (\u00f6rn. <code>@isim<\/code>). Bir nesnenin belirli bir \u00f6rne\u011fine aittir ve o nesnenin metotlar\u0131 i\u00e7inde eri\u015filebilir.<\/p>\n<pre><code class=\"language-ruby\">class Kisi\n      def initialize(isim)\n        @isim = isim\n      end\n    end<\/code><\/pre>\n<p>*   <strong>S\u0131n\u0131f De\u011fi\u015fkenleri<\/strong>: <code>@@<\/code> i\u015faretiyle ba\u015flar (\u00f6rn. <code>@@toplam_sayi<\/code>). Bir s\u0131n\u0131f\u0131n t\u00fcm \u00f6rnekleri taraf\u0131ndan payla\u015f\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\">class Sayac\n      @@toplam_sayi = 0\n      def initialize\n        @@toplam_sayi += 1\n      end\n    end<\/code><\/pre>\n<p>*   <strong>Global De\u011fi\u015fkenler<\/strong>: <code>$<\/code> i\u015faretiyle ba\u015flar (\u00f6rn. <code>$global_degisken<\/code>). Program\u0131n herhangi bir yerinden eri\u015filebilirler. Kullan\u0131m\u0131 genellikle \u00f6nerilmez, \u00e7\u00fcnk\u00fc kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r ve hatalara yol a\u00e7abilir.<\/p>\n<pre><code class=\"language-ruby\">$debug_modu = true<\/code><\/pre>\n<p>*   <strong>Sabitler<\/strong>: B\u00fcy\u00fck harfle ba\u015flayan de\u011fi\u015fkenlerdir (\u00f6rn. <code>PI<\/code>, <code>MAX_LIMIT<\/code>). De\u011feri de\u011fi\u015ftirilmemesi gereken durumlar i\u00e7in kullan\u0131l\u0131r. Ruby, sabitlerin de\u011ferini de\u011fi\u015ftirmeye izin verir ancak bir uyar\u0131 verir.<\/p>\n<pre><code class=\"language-ruby\">PI = 3.14159<\/code><\/pre>\n<h4>Veri Tipleri<\/h4>\n<p>Ruby, \u00e7e\u015fitli temel veri tiplerini destekler:<\/p>\n<p>*   <strong>Say\u0131lar (Numbers)<\/strong>:<br \/>\n    *   <strong>Tam Say\u0131lar (Integers)<\/strong>: <code>1<\/code>, <code>100<\/code>, <code>-5<\/code>.<br \/>\n    *   <strong>Ondal\u0131k Say\u0131lar (Floats)<\/strong>: <code>3.14<\/code>, <code>0.5<\/code>, <code>-10.2<\/code>.<br \/>\n*   <strong>Dizeler (Strings)<\/strong>: Metin verilerini temsil eder. Tek (<code>'<\/code>) veya \u00e7ift (<code>\"<\/code>) t\u0131rnak i\u00e7ine al\u0131n\u0131r. \u00c7ift t\u0131rnaklar, de\u011fi\u015fken enterpolasyonu ve ka\u00e7\u0131\u015f dizileri (<code>\\n<\/code>, <code>\\t<\/code>) i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\">ad = \"Ay\u015fe\"\n    mesaj = \"Merhaba, #{ad}!\" # De\u011fi\u015fken enterpolasyonu\n    puts mesaj #=> Merhaba, Ay\u015fe!<\/code><\/pre>\n<p>*   <strong>Diziler (Arrays)<\/strong>: S\u0131ral\u0131 nesne koleksiyonlar\u0131d\u0131r. K\u00f6\u015feli parantez <code>[]<\/code> ile tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-ruby\">sayilar = [1, 2, 3, 4, 5]\n    isimler = [\"Ali\", \"Veli\", \"Ay\u015fe\"]<\/code><\/pre>\n<p>*   <strong>Hash&#8217;ler (Hashes)<\/strong>: Anahtar-de\u011fer \u00e7iftlerinden olu\u015fan s\u0131ras\u0131z koleksiyonlard\u0131r. K\u00fcme parantezleri <code>{}<\/code> ile tan\u0131mlan\u0131r. Python&#8217;daki s\u00f6zl\u00fcklere veya JavaScript&#8217;teki nesnelere benzer.<\/p>\n<pre><code class=\"language-ruby\">kisi = { \"ad\" => \"Can\", \"yas\" => 30, \"sehir\" => \"\u0130stanbul\" }\n    # Ruby 1.9+'dan itibaren sembol anahtarlar i\u00e7in daha k\u0131sa s\u00f6zdizimi:\n    kisi2 = { ad: \"Deniz\", yas: 25 }<\/code><\/pre>\n<p>*   <strong>Booleans<\/strong>: <code>true<\/code> ve <code>false<\/code> de\u011ferleridir. Ko\u015fullu ifadelerde kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\">dogru_mu = true\n    yanlis_mi = false<\/code><\/pre>\n<p>*   <strong>Nil<\/strong>: Ruby&#8217;de &#8220;hi\u00e7bir \u015fey&#8221; veya &#8220;bo\u015f&#8221; anlam\u0131na gelen \u00f6zel bir nesnedir. <code>null<\/code> veya <code>None<\/code> kavramlar\u0131na benzer.<\/p>\n<pre><code class=\"language-ruby\">deger_yok = nil<\/code><\/pre>\n<p>*   <strong>Semboller (Symbols)<\/strong>: De\u011fi\u015fmez ve benzersiz tan\u0131mlay\u0131c\u0131lard\u0131r. Bellekte yaln\u0131zca bir kez olu\u015fturulurlar ve genellikle hash anahtarlar\u0131 olarak veya metot isimleri olarak kullan\u0131l\u0131rlar. <code>:<\/code> ile ba\u015flarlar.<\/p>\n<pre><code class=\"language-ruby\">:ad\n    :yas<\/code><\/pre>\n<h4>Operat\u00f6rler<\/h4>\n<p>Ruby, \u00e7e\u015fitli operat\u00f6rleri destekler:<\/p>\n<p><em>   <strong>Aritmetik Operat\u00f6rler<\/strong>: <code>+<\/code> (toplama), <code>-<\/code> (\u00e7\u0131karma), <code><\/em><\/code> (\u00e7arpma), <code>\/<\/code> (b\u00f6lme), <code>%<\/code> (mod\u00fcl\u00fcs), <code><em><\/em><\/code> (\u00fcs alma).<br \/>\n*   <strong>Kar\u015f\u0131la\u015ft\u0131rma Operat\u00f6rleri<\/strong>: <code>==<\/code> (e\u015fit mi), <code>!=<\/code> (e\u015fit de\u011fil mi), <code><<\/code> (k\u00fc\u00e7\u00fck m\u00fc), <code>><\/code> (b\u00fcy\u00fck m\u00fc), <code><=<\/code> (k\u00fc\u00e7\u00fck e\u015fit mi), <code>>=<\/code> (b\u00fcy\u00fck e\u015fit mi).<br \/>\n*   <strong>Mant\u0131ksal Operat\u00f6rler<\/strong>: <code>&&<\/code> (VE), <code>||<\/code> (VEYA), <code>!<\/code> (DE\u011e\u0130L).<br \/>\n<em>   <strong>Atama Operat\u00f6rleri<\/strong>: <code>=<\/code> (atama), <code>+=<\/code> (ekleyerek ata), <code>-=<\/code> (\u00e7\u0131kararak ata), <code><\/em>=<\/code> (\u00e7arparak ata), <code>\/=<\/code> (b\u00f6lerek ata) vb.<\/p>\n<h4>Kontrol Ak\u0131\u015f\u0131<\/h4>\n<p>Programlar\u0131n\u0131z\u0131n belirli ko\u015fullara g\u00f6re farkl\u0131 yollar izlemesini sa\u011flamak i\u00e7in kontrol ak\u0131\u015f\u0131 yap\u0131lar\u0131n\u0131 kullan\u0131rs\u0131n\u0131z.<\/p>\n<p>*   <strong><code>if<\/code>\/<code>elsif<\/code>\/<code>else<\/code>\/<code>end<\/code><\/strong>: En temel ko\u015fullu yap\u0131d\u0131r.<\/p>\n<pre><code class=\"language-ruby\">yas = 18\n    if yas >= 18\n      puts \"Yeti\u015fkinsiniz.\"\n    elsif yas >= 13\n      puts \"Ergensiniz.\"\n    else\n      puts \"\u00c7ocuksunuz.\"\n    end<\/code><\/pre>\n<p>    Ruby'de ayr\u0131ca tek sat\u0131rl\u0131k <code>if<\/code> ve <code>unless<\/code> ifadeleri de yayg\u0131n olarak kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-ruby\">puts \"Ya\u015f\u0131n\u0131z uygun.\" if yas >= 18\n    puts \"Ya\u015f\u0131n\u0131z uygun de\u011fil.\" unless yas >= 18<\/code><\/pre>\n<p>*   <strong><code>unless<\/code>\/<code>else<\/code>\/<code>end<\/code><\/strong>: <code>if<\/code>'in tersidir, ko\u015ful yanl\u0131\u015fsa \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-ruby\">hava_yagmurlu = false\n    unless hava_yagmurlu\n      puts \"\u015eemsiyeye gerek yok.\"\n    else\n      puts \"\u015eemsiyenizi al\u0131n!\"\n    end<\/code><\/pre>\n<p>*   <strong>Ternary Operat\u00f6r<\/strong>: Tek sat\u0131rda basit <code>if\/else<\/code> durumlar\u0131 i\u00e7in k\u0131salt\u0131lm\u0131\u015f bir formdur. <code>ko\u015ful ? do\u011fru_ise_de\u011fer : yanl\u0131\u015f_ise_de\u011fer<\/code><\/p>\n<pre><code class=\"language-ruby\">durum = (yas >= 18) ? \"Yeti\u015fkin\" : \"\u00c7ocuk\"\n    puts durum<\/code><\/pre>\n<p>*   <strong><code>case<\/code>\/<code>when<\/code>\/<code>else<\/code>\/<code>end<\/code><\/strong>: Birden fazla ko\u015fulu kontrol etmek i\u00e7in daha temiz bir yol sunar.<\/p>\n<pre><code class=\"language-ruby\">gun = \"Pazartesi\"\n    case gun\n    when \"Pazartesi\"\n      puts \"Hafta ba\u015f\u0131.\"\n    when \"Cumartesi\", \"Pazar\"\n      puts \"Hafta sonu!\"\n    else\n      puts \"Hafta i\u00e7i.\"\n    end<\/code><\/pre>\n<h4>D\u00f6ng\u00fcler<\/h4>\n<p>D\u00f6ng\u00fcler, belirli bir kod blo\u011funu birden \u00e7ok kez \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>while<\/code>\/<code>end<\/code><\/strong>: Belirli bir ko\u015ful do\u011fru oldu\u011fu s\u00fcrece \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-ruby\">sayac = 0\n    while sayac < 5\n      puts \"Sayac: #{sayac}\"\n      sayac += 1\n    end<\/code><\/pre>\n<p>*   <strong><code>until<\/code>\/<code>end<\/code><\/strong>: Belirli bir ko\u015ful yanl\u0131\u015f oldu\u011fu s\u00fcrece \u00e7al\u0131\u015f\u0131r (<code>while<\/code>'\u0131n tersi).<\/p>\n<pre><code class=\"language-ruby\">sayac = 0\n    until sayac >= 5\n      puts \"Sayac: #{sayac}\"\n      sayac += 1\n    end<\/code><\/pre>\n<p>*   <strong><code>for<\/code>\/<code>in<\/code>\/<code>end<\/code><\/strong>: Belirli bir koleksiyonun her \u00f6\u011fesi \u00fczerinde d\u00f6ner. Ruby'de genellikle <code>each<\/code> metodu tercih edilir.<\/p>\n<pre><code class=\"language-ruby\">for i in 0..4\n      puts \"Say\u0131: #{i}\"\n    end<\/code><\/pre>\n<p>*   <strong><code>each<\/code> Metodu<\/strong>: Koleksiyonlar (diziler, hash'ler) \u00fczerinde gezinmek i\u00e7in en yayg\u0131n ve idiomatik Ruby yoludur.<\/p>\n<pre><code class=\"language-ruby\">sayilar = [10, 20, 30]\n    sayilar.each do |sayi|\n      puts \"Say\u0131: #{sayi}\"\n    end\n\n    meyveler = { elma: 1, muz: 2, portakal: 3 }\n    meyveler.each do |meyve, adet|\n      puts \"#{meyve.capitalize}: #{adet} adet\"\n    end<\/code><\/pre>\n<p>*   <strong><code>loop<\/code>\/<code>break<\/code>\/<code>next<\/code><\/strong>: Sonsuz bir d\u00f6ng\u00fc olu\u015fturur ve <code>break<\/code> ile \u00e7\u0131k\u0131\u015f yap\u0131l\u0131r, <code>next<\/code> ile bir sonraki iterasyona ge\u00e7ilir.<\/p>\n<pre><code class=\"language-ruby\">i = 0\n    loop do\n      puts \"D\u00f6ng\u00fcdeyim: #{i}\"\n      i += 1\n      break if i > 3 # i 3'ten b\u00fcy\u00fck oldu\u011funda d\u00f6ng\u00fcy\u00fc sonland\u0131r.\n    end<\/code><\/pre>\n<h4>Metotlar<\/h4>\n<p>Metotlar, belirli bir g\u00f6revi yerine getiren kod bloklar\u0131d\u0131r. Kodun tekrar\u0131n\u0131 azalt\u0131r ve okunabilirli\u011fi art\u0131r\u0131r.<\/p>\n<p>*   <strong>Metot Tan\u0131mlama<\/strong>: <code>def<\/code> anahtar kelimesiyle ba\u015flar, metot ad\u0131 ve parantez i\u00e7inde parametreler (iste\u011fe ba\u011fl\u0131) al\u0131r ve <code>end<\/code> ile biter.<\/p>\n<pre><code class=\"language-ruby\">def merhaba_de(isim)\n      puts \"Merhaba, #{isim}!\"\n    end\n\n    def toplama(sayi1, sayi2)\n      sayi1 + sayi2 # Ruby'de son ifade otomatik olarak geri d\u00f6ner.\n    end\n\n    def selamlama(isim = \"Misafir\") # Varsay\u0131lan parametre de\u011feri\n      puts \"Ho\u015f geldiniz, #{isim}!\"\n    end<\/code><\/pre>\n<p>*   <strong>Metot \u00c7a\u011f\u0131rma<\/strong>: Metot ad\u0131n\u0131 ve gerekli arg\u00fcmanlar\u0131 belirterek \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\">merhaba_de(\"Alice\") #=> Merhaba, Alice!\n    sonuc = toplama(5, 3)\n    puts \"Toplam: #{sonuc}\" #=> Toplam: 8\n    selamlama #=> Ho\u015f geldiniz, Misafir!\n    selamlama(\"Bob\") #=> Ho\u015f geldiniz, Bob!<\/code><\/pre>\n<h3>\u0130lk Ruby Program\u0131n\u0131z\u0131 Yazma<\/h3>\n<p>Art\u0131k Ruby'nin temel yap\u0131lar\u0131n\u0131 \u00f6\u011frendi\u011fimize g\u00f6re, ilk programlar\u0131m\u0131z\u0131 yazmaya ba\u015flayabiliriz.<\/p>\n<h4>\"Merhaba D\u00fcnya!\"<\/h4>\n<p>Her programlama dilinde geleneksel ilk program, ekrana \"Merhaba D\u00fcnya!\" yazd\u0131rmakt\u0131r.<\/p>\n<p>1.  <strong>Dosya Olu\u015fturma<\/strong>: Bir metin d\u00fczenleyici a\u00e7\u0131n ve yeni bir dosya olu\u015fturun. Bu dosyay\u0131 <code>merhaba.rb<\/code> olarak kaydedin (<code>.rb<\/code> Ruby dosyalar\u0131 i\u00e7in standart uzant\u0131d\u0131r).<br \/>\n2.  <strong>Kod Yazma<\/strong>: Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki kodu yaz\u0131n:<\/p>\n<pre><code class=\"language-ruby\"># merhaba.rb\n    puts \"Merhaba D\u00fcnya!\"<\/code><\/pre>\n<p>    <code>puts<\/code> metodu, arg\u00fcman\u0131n\u0131 ekrana yazd\u0131r\u0131r ve ard\u0131ndan yeni bir sat\u0131ra ge\u00e7er. <code>print<\/code> metodu ise yeni sat\u0131ra ge\u00e7mez.<br \/>\n3.  <strong>Program\u0131 \u00c7al\u0131\u015ft\u0131rma<\/strong>: Terminalinizi veya komut istemcinizi a\u00e7\u0131n. <code>merhaba.rb<\/code> dosyas\u0131n\u0131 kaydetti\u011finiz dizine gidin ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">ruby merhaba.rb<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131 olarak <code>Merhaba D\u00fcnya!<\/code> g\u00f6rmelisiniz. Tebrikler, ilk Ruby program\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131n\u0131z!<\/p>\n<h4>Kullan\u0131c\u0131dan Girdi Alma<\/h4>\n<p>Programlar\u0131n \u00e7o\u011fu, kullan\u0131c\u0131dan girdi alarak daha etkile\u015fimli hale gelir. Ruby'de <code>gets<\/code> metodu kullan\u0131c\u0131dan tek sat\u0131rl\u0131k girdi almak i\u00e7in kullan\u0131l\u0131r. <code>chomp<\/code> metodu ise girdinin sonundaki yeni sat\u0131r karakterini (<code>\\n<\/code>) kald\u0131r\u0131r.<\/p>\n<p>1.  <strong>Dosya Olu\u015fturma<\/strong>: <code>ad_sor.rb<\/code> ad\u0131nda yeni bir dosya olu\u015fturun.<br \/>\n2.  <strong>Kod Yazma<\/strong>:<\/p>\n<pre><code class=\"language-ruby\"># ad_sor.rb\n    print \"Ad\u0131n\u0131z nedir? \" # print metodu imleci ayn\u0131 sat\u0131rda b\u0131rak\u0131r\n    ad = gets.chomp\n\n    puts \"Merhaba, #{ad}! Ruby d\u00fcnyas\u0131na ho\u015f geldiniz.\"<\/code><\/pre>\n<p>3.  <strong>Program\u0131 \u00c7al\u0131\u015ft\u0131rma<\/strong>:<\/p>\n<pre><code class=\"language-bash\">ruby ad_sor.rb<\/code><\/pre>\n<p>    Program sizden ad\u0131n\u0131z\u0131 isteyecek, girdikten sonra size \u00f6zel bir selamlama mesaj\u0131 g\u00f6sterecektir.<\/p>\n<p>    Girdi\u011finiz metin her zaman bir dize (String) olarak kabul edilir. E\u011fer say\u0131sal bir girdi bekliyorsan\u0131z, onu uygun t\u00fcre d\u00f6n\u00fc\u015ft\u00fcrmeniz gerekir:<\/p>\n<pre><code class=\"language-ruby\">print \"Ya\u015f\u0131n\u0131z\u0131 girin: \"\n    yas_string = gets.chomp\n    yas_integer = yas_string.to_i # String'i tam say\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\u00fcr\n\n    puts \"Gelecek y\u0131l #{yas_integer + 1} ya\u015f\u0131nda olacaks\u0131n\u0131z.\"<\/code><\/pre>\n<p>    <code>to_i<\/code> (to integer) ve <code>to_f<\/code> (to float) gibi metotlar bu d\u00f6n\u00fc\u015f\u00fcmler i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>Basit Bir Hesap Makinesi<\/h4>\n<p>\u015eimdi \u00f6\u011frendiklerimizi birle\u015ftirerek basit bir hesap makinesi program\u0131 yazal\u0131m.<\/p>\n<p>1.  <strong>Dosya Olu\u015fturma<\/strong>: <code>hesap_makinesi.rb<\/code> ad\u0131nda bir dosya olu\u015fturun.<br \/>\n2.  <strong>Kod Yazma<\/strong>:<\/p>\n<pre><code class=\"language-ruby\"># hesap_makinesi.rb\n\n    puts \"Basit Hesap Makinesi\"\n    puts \"-------------------\"\n\n    print \"\u0130lk say\u0131y\u0131 girin: \"\n    sayi1 = gets.chomp.to_f # Ondal\u0131kl\u0131 say\u0131lar\u0131 da desteklemek i\u00e7in to_f kullan\u0131yoruz\n\n    print \"\u0130kinci say\u0131y\u0131 girin: \"\n    sayi2 = gets.chomp.to_f\n\n    print \"Yapmak istedi\u011finiz i\u015flemi se\u00e7in (+, -, *, \/): \"\n    islem = gets.chomp\n\n    sonuc = 0.0\n\n    case islem\n    when \"+\"\n      sonuc = sayi1 + sayi2\n    when \"-\"\n      sonuc = sayi1 - sayi2\n    when \"*\"\n      sonuc = sayi1 * sayi2\n    when \"\/\"\n      if sayi2 == 0\n        puts \"Hata: S\u0131f\u0131ra b\u00f6lme yap\u0131lamaz!\"\n        exit # Program\u0131 sonland\u0131r\n      else\n        sonuc = sayi1 \/ sayi2\n      end\n    else\n      puts \"Ge\u00e7ersiz i\u015flem!\"\n      exit # Program\u0131 sonland\u0131r\n    end\n\n    puts \"Sonu\u00e7: #{sonuc}\"<\/code><\/pre>\n<p>3.  <strong>Program\u0131 \u00c7al\u0131\u015ft\u0131rma<\/strong>:<\/p>\n<pre><code class=\"language-bash\">ruby hesap_makinesi.rb<\/code><\/pre>\n<p>    Program, iki say\u0131 ve bir i\u015flem isteyecek, ard\u0131ndan sonucu ekrana yazd\u0131racakt\u0131r. S\u0131f\u0131ra b\u00f6lme gibi hatal\u0131 durumlar\u0131 da ele ald\u0131k.<\/p>\n<h4>Daha Fazla Etkile\u015fim: Bir Tahmin Oyunu<\/h4>\n<p>Biraz daha karma\u015f\u0131k, d\u00f6ng\u00fcleri ve ko\u015fullu ifadeleri bir arada kullanan bir tahmin oyunu yazal\u0131m.<\/p>\n<p>1.  <strong>Dosya Olu\u015fturma<\/strong>: <code>tahmin_oyunu.rb<\/code> ad\u0131nda bir dosya olu\u015fturun.<br \/>\n2.  <strong>Kod Yazma<\/strong>:<\/p>\n<pre><code class=\"language-ruby\"># tahmin_oyunu.rb\n\n    puts \"Say\u0131 Tahmin Oyunu!\"\n    puts \"------------------\"\n    puts \"1 ile 100 aras\u0131nda bir say\u0131 tuttum. Bakal\u0131m tahmin edebilecek misin?\"\n\n    gizli_sayi = rand(1..100) # 1 ile 100 aras\u0131nda rastgele bir say\u0131 \u00fcretir\n    tahmin_sayisi = 0\n    tahmin = nil\n\n    loop do\n      tahmin_sayisi += 1\n      print \"Tahmininizi girin (#{tahmin_sayisi}. deneme): \"\n      tahmin = gets.chomp.to_i\n\n      if tahmin < gizli_sayi\n        puts \"\u00c7ok d\u00fc\u015f\u00fck! Daha y\u00fcksek bir say\u0131 dene.\"\n      elsif tahmin > gizli_sayi\n        puts \"\u00c7ok y\u00fcksek! Daha d\u00fc\u015f\u00fck bir say\u0131 dene.\"\n      else\n        puts \"Tebrikler! #{tahmin_sayisi} denemede do\u011fru bildiniz. Say\u0131 #{gizli_sayi} idi.\"\n        break # D\u00f6ng\u00fcy\u00fc sonland\u0131r\n      end\n    end\n\n    puts \"Oyun bitti.\"<\/code><\/pre>\n<p>3.  <strong>Program\u0131 \u00c7al\u0131\u015ft\u0131rma<\/strong>:<\/p>\n<pre><code class=\"language-bash\">ruby tahmin_oyunu.rb<\/code><\/pre>\n<p>    Bu program, <code>rand<\/code> metodunu kullanarak rastgele bir say\u0131 \u00fcretir ve kullan\u0131c\u0131dan bu say\u0131y\u0131 tahmin etmesini ister. <code>loop<\/code> d\u00f6ng\u00fcs\u00fc, kullan\u0131c\u0131 do\u011fru tahmini yapana kadar devam eder ve her denemede ipu\u00e7lar\u0131 verir.<\/p>\n<h3>Program\u0131n\u0131z\u0131 \u00c7al\u0131\u015ft\u0131rma ve Hata Ay\u0131klama<\/h3>\n<p>Program yazmak kadar, onu \u00e7al\u0131\u015ft\u0131rmak ve olas\u0131 hatalar\u0131 gidermek de \u00f6nemlidir.<\/p>\n<h4>Komut Sat\u0131r\u0131ndan \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Ruby programlar\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in temel komut <code>ruby [dosya_ad\u0131.rb]<\/code> \u015feklindedir.<\/p>\n<p>*   <strong>Ayn\u0131 Dizin<\/strong>: E\u011fer terminaliniz, Ruby dosyan\u0131zla ayn\u0131 dizindeyse, do\u011frudan <code>ruby dosya_ad\u0131.rb<\/code> yazman\u0131z yeterlidir.<br \/>\n*   <strong>Farkl\u0131 Dizin<\/strong>: E\u011fer farkl\u0131 bir dizindeyseniz, dosyan\u0131n tam yolunu belirtmeniz gerekir (\u00f6rn. <code>ruby \/home\/kullanici\/projelerim\/program.rb<\/code> veya <code>ruby C:\\Users\\Kullanici\\Documents\\program.rb<\/code>).<br \/>\n*   <strong>\u00c7al\u0131\u015ft\u0131r\u0131labilir Dosyalar (Shebang)<\/strong>: Linux ve macOS'ta, Ruby dosyan\u0131z\u0131n en ba\u015f\u0131na <code>#!\/usr\/bin\/env ruby<\/code> gibi bir \"shebang\" sat\u0131r\u0131 ekleyebilir ve dosyaya \u00e7al\u0131\u015ft\u0131rma izni verebilirsiniz (<code>chmod +x dosya_ad\u0131.rb<\/code>). Bu durumda, dosyay\u0131 do\u011frudan <code>.\/dosya_ad\u0131.rb<\/code> komutuyla \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<h4>Yayg\u0131n Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h4>\n<p>Programlamaya yeni ba\u015flayanlar i\u00e7in hatalar ka\u00e7\u0131n\u0131lmazd\u0131r. \u00d6nemli olan, hata mesajlar\u0131n\u0131 okumay\u0131 ve anlamay\u0131 \u00f6\u011frenmektir.<\/p>\n<p>*   <strong><code>SyntaxError<\/code><\/strong>: S\u00f6zdizimi hatas\u0131 demektir. Bir anahtar kelimeyi yanl\u0131\u015f yazm\u0131\u015f, parantezi kapatmay\u0131 unutmu\u015f veya bir <code>end<\/code> anahtar kelimesini atlam\u0131\u015f olabilirsiniz. Hata mesaj\u0131 genellikle hatan\u0131n olu\u015ftu\u011fu dosya ad\u0131n\u0131 ve sat\u0131r numaras\u0131n\u0131 belirtir.<\/p>\n<pre><code class=\"language-ruby\"># Hatal\u0131 kod: eksik 'end'\n    if true\n      puts \"Do\u011fru\"\n    # end eksik!<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <code>syntax error, unexpected end-of-input, expecting <\/code>end''<code><br \/>\n*   <strong><\/code>NameError<code><\/strong>: Tan\u0131mlanmam\u0131\u015f bir de\u011fi\u015fkeni veya metodu \u00e7a\u011f\u0131rmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda olu\u015fur. Genellikle bir yaz\u0131m hatas\u0131 veya de\u011fi\u015fkenin tan\u0131mland\u0131\u011f\u0131 kapsam d\u0131\u015f\u0131ndan eri\u015fmeye \u00e7al\u0131\u015fmaktan kaynaklan\u0131r.<\/p>\n<pre><code class=\"language-ruby\"># Hatal\u0131 kod: 'mesaj' yerine 'mesag' yaz\u0131lm\u0131\u015f\n    mesaj = \"Merhaba\"\n    puts mesag<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <\/code>undefined local variable or method 'mesag' for main:Object (NameError)<code><br \/>\n*   <strong><\/code>TypeError<code><\/strong>: Yanl\u0131\u015f t\u00fcrde bir i\u015flem yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda olu\u015fur (\u00f6rn. bir say\u0131y\u0131 bir dizeyle toplamaya \u00e7al\u0131\u015fmak).<\/p>\n<pre><code class=\"language-ruby\"># Hatal\u0131 kod: say\u0131 ile dize toplama\n    sayi = 10\n    metin = \"merhaba\"\n    puts sayi + metin<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <\/code>String can't be coerced into Integer (TypeError)<code><br \/>\n*   <strong><\/code>ZeroDivisionError<code><\/strong>: Bir say\u0131y\u0131 s\u0131f\u0131ra b\u00f6lmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda olu\u015fur.<\/p>\n<pre><code class=\"language-ruby\">puts 10 \/ 0<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <\/code>divided by 0 (ZeroDivisionError)<code><\/p>\n<p>Hata mesajlar\u0131n\u0131 okumak, sorunu anlaman\u0131n ilk ad\u0131m\u0131d\u0131r. Genellikle hata mesaj\u0131n\u0131n son sat\u0131r\u0131nda hatan\u0131n t\u00fcr\u00fc ve bir a\u00e7\u0131klama bulunur. \u00dcst sat\u0131rlarda ise hatan\u0131n hangi dosyan\u0131n hangi sat\u0131r\u0131nda meydana geldi\u011fi g\u00f6sterilir (stack trace).<\/p>\n<h4>Hata Ay\u0131klama Ara\u00e7lar\u0131<\/h4>\n<p>*   <strong><\/code>puts<code> Debugging<\/strong>: En basit hata ay\u0131klama y\u00f6ntemidir. Kodunuzun belirli noktalar\u0131nda de\u011fi\u015fkenlerin de\u011ferlerini veya program\u0131n ak\u0131\u015f\u0131n\u0131 kontrol etmek i\u00e7in <\/code>puts<code> ifadeleri ekleyebilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">sayi = 5\n    puts \"Sayi de\u011feri: #{sayi}\" # Debugging i\u00e7in eklenen sat\u0131r\n    sonuc = sayi * 2\n    puts \"Sonu\u00e7 de\u011feri: #{sonuc}\" # Debugging i\u00e7in eklenen sat\u0131r<\/code><\/pre>\n<p>*   <strong>Etkile\u015fimli Debugger'lar<\/strong>: Daha geli\u015fmi\u015f hata ay\u0131klama i\u00e7in <\/code>pry<code> veya <\/code>byebug<code> gibi gem'ler (Ruby paketleri) kullanabilirsiniz. Bu ara\u00e7lar, kodunuzu ad\u0131m ad\u0131m \u00e7al\u0131\u015ft\u0131rman\u0131za, de\u011fi\u015fkenlerin de\u011ferlerini incelemenize ve program\u0131n ak\u0131\u015f\u0131n\u0131 kontrol etmenize olanak tan\u0131r.<br \/>\n    Kurulum i\u00e7in: <\/code>gem install pry<code> veya <\/code>gem install byebug<code><br \/>\n    Kullan\u0131m i\u00e7in: Kodunuzun istedi\u011finiz bir yerine <\/code>binding.pry<code> veya <\/code>byebug<code> ekleyin. Program o noktaya geldi\u011finde etkile\u015fimli bir konsol a\u00e7\u0131lacakt\u0131r.<\/p>\n<h3>Sonraki Ad\u0131mlar<\/h3>\n<p>Ruby \u00f6\u011frenme yolculu\u011funuzda ilk ad\u0131mlar\u0131 att\u0131n\u0131z. \u015eimdi bu temellerin \u00fczerine in\u015fa etme zaman\u0131.<\/p>\n<p>*   <strong>Ruby Belgelerini Ke\u015ffedin<\/strong>: Ruby'nin resmi belgeleri (ruby-doc.org), t\u00fcm metotlar\u0131, s\u0131n\u0131flar\u0131 ve mod\u00fclleri kapsayan kapsaml\u0131 bir kaynakt\u0131r. Bir metot veya s\u0131n\u0131f hakk\u0131nda bilgi edinmek istedi\u011finizde ba\u015fvuraca\u011f\u0131n\u0131z ilk yer olmal\u0131d\u0131r.<br \/>\n*   <strong>Online Kaynaklar\u0131 Kullan\u0131n<\/strong>: Codecademy, The Odin Project, freeCodeCamp gibi platformlar, interaktif dersler ve projeler arac\u0131l\u0131\u011f\u0131yla Ruby bilginizi peki\u015ftirmenize yard\u0131mc\u0131 olabilir.<br \/>\n*   <strong>K\u00fc\u00e7\u00fck Projeler Geli\u015ftirin<\/strong>: \u00d6\u011frendiklerinizi uygulamak en iyi \u00f6\u011frenme y\u00f6ntemidir. Basit oyunlar (ta\u015f-ka\u011f\u0131t-makas), not uygulamalar\u0131 veya komut sat\u0131r\u0131 ara\u00e7lar\u0131 gibi k\u00fc\u00e7\u00fck projeler geli\u015ftirerek prati\u011finizi art\u0131r\u0131n.<br \/>\n*   <strong>RubyGems'i Ara\u015ft\u0131r\u0131n<\/strong>: Ruby ekosistemi, \"gem\" ad\u0131 verilen binlerce k\u00fct\u00fcphane ve ara\u00e7la doludur. Bu gem'ler, web geli\u015ftirme, veri taban\u0131 etkile\u015fimi, test ve daha bir\u00e7ok alanda size yard\u0131mc\u0131 olabilir. <\/code>bundler` gibi ara\u00e7lar, projelerinizdeki gem ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmenize olanak tan\u0131r.<br \/>\n*   <strong>Ruby on Rails'e Giri\u015f<\/strong>: E\u011fer web geli\u015ftirmeyle ilgileniyorsan\u0131z, Ruby on Rails \u00e7er\u00e7evesi Ruby bilginizi bir \u00fcst seviyeye ta\u015f\u0131yacakt\u0131r. Model-View-Controller (MVC) mimarisi \u00fczerine kurulu bu \u00e7er\u00e7eve, web uygulamalar\u0131 geli\u015ftirmeyi h\u0131zl\u0131 ve keyifli hale getirir.<br \/>\n*   <strong>Topluluklara Kat\u0131l\u0131n<\/strong>: Ruby toplulu\u011fu olduk\u00e7a aktif ve yard\u0131mseverdir. Forumlara, Discord sunucular\u0131na veya yerel bulu\u015fmalara kat\u0131larak di\u011fer geli\u015ftiricilerle ba\u011flant\u0131 kurun, sorular sorun ve deneyimlerinizi payla\u015f\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Ruby'nin kurulumundan ba\u015flayarak temel s\u00f6zdizimi, de\u011fi\u015fkenler, veri tipleri, kontrol ak\u0131\u015f\u0131, d\u00f6ng\u00fcler ve metotlar gibi temel kavramlar\u0131 \u00f6\u011frendik. \u0130lk \"Merhaba D\u00fcnya!\" program\u0131n\u0131z\u0131 yazd\u0131k, kullan\u0131c\u0131dan girdi almay\u0131, basit bir hesap makinesi olu\u015fturmay\u0131 ve bir tahmin oyunu geli\u015ftirmeyi deneyimledik. Ayr\u0131ca, programlar\u0131n\u0131z\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 ve yayg\u0131n hatalarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131 da g\u00f6rd\u00fck.<\/p>\n<p>Ruby, geli\u015ftirici mutlulu\u011funu ve \u00fcretkenli\u011fini \u00f6n planda tutan, esnek ve g\u00fc\u00e7l\u00fc bir dildir. Nesne y\u00f6nelimli yap\u0131s\u0131 ve zarif s\u00f6zdizimi, kod yazmay\u0131 keyifli hale getirir. Bu makale, Ruby yolculu\u011funuzun sadece ba\u015flang\u0131c\u0131d\u0131r. Unutmay\u0131n, en iyi \u00f6\u011frenme yolu pratik yapmakt\u0131r. Kod yazmaya devam edin, yeni \u015feyler deneyin, hatalar yapmaktan korkmay\u0131n ve her hatadan ders \u00e7\u0131kar\u0131n. Ruby'nin sundu\u011fu geni\u015f imkanlar\u0131 ke\u015ffetmeye devam ettik\u00e7e, bu dilin ne kadar g\u00fc\u00e7l\u00fc ve e\u011flenceli oldu\u011funu daha iyi anlayacaks\u0131n\u0131z. \u0130yi kodlamalar!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?\nRuby, zarif s\u00f6zdizimi ve geli\u015ftirici verimlili\u011fini \u00f6n planda tutan a\u00e7\u0131k kaynakl\u0131, dinamik bir p","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35980","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?\" \/>\n<meta property=\"og:description\" content=\"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? Ruby, zarif s\u00f6zdizimi ve geli\u015ftirici verimlili\u011fini \u00f6n planda tutan a\u00e7\u0131k kaynakl\u0131, dinamik bir p\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-06T07:40:55+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?\",\"datePublished\":\"2025-12-06T07:40:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\"},\"wordCount\":2790,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\",\"name\":\"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-06T07:40:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/","og_locale":"tr_TR","og_type":"article","og_title":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?","og_description":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? Ruby, zarif s\u00f6zdizimi ve geli\u015ftirici verimlili\u011fini \u00f6n planda tutan a\u00e7\u0131k kaynakl\u0131, dinamik bir p","og_url":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-06T07:40:55+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?","datePublished":"2025-12-06T07:40:55+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/"},"wordCount":2790,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/","url":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/","name":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-06T07:40:55+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ilk-ruby-programinizi-nasil-yazarsiniz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0130lk Ruby Program\u0131n\u0131z\u0131 Nas\u0131l Yazars\u0131n\u0131z?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35980"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35980\/revisions"}],"predecessor-version":[{"id":35981,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35980\/revisions\/35981"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}