Created
March 22, 2016 21:44
-
-
Save huseyin/aaf4636ca000ef3eaeb6 to your computer and use it in GitHub Desktop.
Nyp-3 İmplementasyonu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # encoding: utf-8 | |
| PROGRAM = 'emlakçı' | |
| class String | |
| def unindent | |
| gsub /^\s+/, '' | |
| end | |
| end | |
| class Emlak | |
| attr_reader :tip, :şehir, :oda_sayısı | |
| attr_accessor :fiyat | |
| @@toplam = 0 | |
| @@emlaklar = {} | |
| def initialize(tip, şehir, odalar, fiyat) | |
| @tip = tip | |
| @şehir = şehir | |
| @oda_sayısı = odalar | |
| @fiyat = fiyat | |
| @@toplam += 1 | |
| @@emlaklar["emlak#{@@toplam}"] = to_s | |
| end | |
| def self.toplam | |
| @@toplam | |
| end | |
| def self.emlaklar | |
| @@emlaklar | |
| end | |
| def to_s | |
| <<-EOF.unindent | |
| Tip: #{@tip} | |
| Şehir: #{@şehir} | |
| Oda Sayısı: #{@oda_sayısı} | |
| Fiyat: #{@fiyat} | |
| EOF | |
| end | |
| end | |
| # Kritik Hataları burada bas. | |
| def hurt(message) | |
| $stderr.puts message | |
| end | |
| # Soru sormayı otomatize edelim. | |
| def ask(message) | |
| # promptu verdik. | |
| print message | |
| gets.chomp.strip | |
| end | |
| # Öncelikle komut satırından gelen komutu tokenlarına ayrıştıralım. | |
| def parse(command) | |
| tokens = [] | |
| command.scan(/(\w+)([ \n\t\r])?/) | |
| .each { |t| tokens << t.first } | |
| tokens | |
| end | |
| def execute(*args) | |
| # Parse edilerek gelen komut ve alt komutlara bakarak ilk gelen | |
| # argümanın ana komut, sonrakilerin ise alt komut olduğunu ata. | |
| cmd = args.first | |
| subcmd = args[1..(args.size)] | |
| # Kritik olan yere geldik. Komutu çalıştırırken fonksiyona, komut | |
| # ve argüman bilgilerini de paslayalım. | |
| send cmd.to_sym, cmd.to_sym, *subcmd | |
| rescue NoMethodError | |
| hurt "#{PROGRAM}: böyle bir komut yok: #{cmd}" | |
| rescue => err | |
| hurt "#{PROGRAM}: #{err}" | |
| end | |
| # Yeni bir emlak oluşturma komutu bu fonksiyon çağrısıyla üzerinden | |
| # gerçekleştirilsin. | |
| def new(cmd, *args) | |
| unless args.empty? | |
| fail "#{cmd}: bu komut için herhangi bir argüman önerilmez" | |
| end | |
| # Bir emlak örneği oluşturmak için gerekli argümanlar burada | |
| # istensin. | |
| type = ask 'Emlağın tipi: ' | |
| city = ask 'Emlağın ili: ' | |
| rooms = ask 'Oda sayısı: ' | |
| price = ask 'Fiyatı: ' | |
| # Emlak örneği oluştur. | |
| Emlak.new(type, city, rooms, price) | |
| end | |
| # Oluşturulan emlakların listesini kontrollü olarak ekrana basma | |
| # görevini icra et. | |
| def list(cmd, *args) | |
| if args.empty? | |
| Emlak.emlaklar.each_key { |k| puts '* ' + k } | |
| else | |
| case args[0] | |
| when 'hepsi' | |
| # Oluşturulan tüm emlakları ekrana bas. | |
| items = Emlak.emlaklar.values | |
| when 'konut' | |
| # Emlak kaydına göre oluşturulmuş emlağı bas. | |
| items = Emlak.emlaklar[args[1]] | |
| else | |
| fail "#{cmd}: böyle bir argüman girdisi yok: #{args[0]}" | |
| end | |
| puts items | |
| end | |
| end | |
| # Programın kapanma kapısı. | |
| def close(cmd, *args) | |
| unless args.empty? | |
| fail "#{cmd}: bu komut için herhangi bir argüman önerilmez" | |
| end | |
| exit | |
| end | |
| # FIXME: Bu fonksiyonda çağrılabilir. | |
| def main | |
| while true | |
| cmd = ask 'komut: ' | |
| execute *parse(cmd) | |
| end | |
| end | |
| alias :ekle :new | |
| alias :listele :list | |
| alias :kapat :close | |
| main if __FILE__ == $PROGRAM_NAME |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment