Skip to content

Instantly share code, notes, and snippets.

@huseyin
Created March 22, 2016 21:44
Show Gist options
  • Save huseyin/aaf4636ca000ef3eaeb6 to your computer and use it in GitHub Desktop.
Save huseyin/aaf4636ca000ef3eaeb6 to your computer and use it in GitHub Desktop.
Nyp-3 İmplementasyonu
# 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