Ruby ve Rails'de Exception Kullanımı



Benzer belgeler
Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Python GELECEK. Barış Metin Linux Sistemleri. Python Programlama Dili

Mantıksal İşlemler. 7.1 true, false, nil

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Al Ruby'i Vur Python'a

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

ile Python gibi kod yazma

Lecture 11: Generics

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Üst Düzey Programlama

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

C++ Dersi: Nesne Tabanlı Programlama

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

Operatörlerin Aşırı Yüklenmesi

Ajanda. Ruby Betik Dili ve Ruby on Rails. Dr. Erek Göktürk. IdentraYazılım ve Donanım Çözümleri. identra.com.

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

HSancak Nesne Tabanlı Programlama I Ders Notları

PYTHON 3. Python Nedir? Yrd. Doç. Dr. Murat Olcay ÖZCAN

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Görsel Programlama-I (Visual Programming) 2.Hafta

PAKET TRANSFER SİSTEMİ

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

19 Şubat 2016 Cuma

BİL132 Bilgisayar Programlama II

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

AST415 Astronomide Sayısal Çözümleme - I. 5. Veri Girişi ve Hata Yönetimi

PYTHON PROGRAMLAMA DİLİ

Sunum İçeriği. Programlamaya Giriş

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Module ve Mixin Module nedir? 17.2 Neden Module?

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

VERİ TABANI İŞLEMLERİ (NESNE TABANLI PROGRAMLAMA TEKNİĞİ İLE)

Microsoft SQL Server Sorgulama

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

BİL-141 Bilgisayar Programlama I (Java)

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Nesne Yönelimli Programlama

Yrd. Doç. Dr. Caner ÖZCAN

Timer İle arka plan renk değişimi

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

BİLGİSAYAR PROGRAMLARININ TASARIMLARINDAKİ VE KODLARINDAKİ SORUNLARIN BELİRLENMESİ ALPER FİLİZ MEHMET ALİ SERT

Öğr. Gör. Serkan AKSU 1

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Android Ders Notları

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

PAKET TRANSFER SİSTEMİ

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

FIRAT ÜNİVERSİTESİ BİLGİSAYAR MÜH.

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Business Delegate Tasarım Şablonu KurumsalJava.com

10/17/2007 Nesneye Yonelik Programlama 3.1

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

Bölüm 12. Nesne yönelimli programlama desteği

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

WEB SERVİSİ ile ACENTE VE KULLANICI İŞLEMLERİ GİRİŞ... 2 a. Tanımlar... 2 b. Sınıflar ACENTE TANIM / GÜNCELLEME FONKSİYONLARI... 4 a.

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Spring Framework Eğitimi

Yrd. Doç. Dr. Caner ÖZCAN

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Ruby On Rails. Hüseyin Gömleksizoğlu

Rails İle Ağ Uygulamaları Geliştirimi

De iflken = InputBox Görüntülenecek Metin Bafllık. InputBox tan gelecek cevap, bir de iflkene aktarılmalıdır. End Sub B R SAYI TUT

İstisna yönetimi (Exception Management) İşakış yönetimi Geçerlilik yönetimi

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Nesne Yönelimli Programlamaya Giriş - 2. Cem Ahmet MERCAN 16/04/2009

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

«BM364» Veritabanı Uygulamaları

PostgreSQL ile NoSQL. Gereksinimlerinizi Karşılamak

PAKET TRANSFER SİSTEMİ

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10

BMH-303 Nesneye Yönelik Programlama

Operatörlere İşlev Yükleme

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Kaynak Kod Güvenliği Bir Güvensiz API Örneği

1 JAVASCRIPT NEDİR? 1

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

İskambil Kağıtları. Bir İskambil kağıdı


3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

// hataları işaret eden referans

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Bilgisayarda Programlama. Temel Kavramlar

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Verimlilik İçin ETKİN BİLGİ YÖNETİMİ. EXCEL de Vazgeçilmez 5 Fonksiyon

Tedarik Zinciri Yönetiminde Yapay Zeka Teknikler

Qt Temelleri. Eren BAŞTÜRK.

Ruby Sınıfları. 3.1 Ruby Yorumlayıcı Bir Dildir

Transkript:

Ruby ve Rails'de Exception Kullanımı Erek Göktürk

Niye bu konu? Betik dili kullanımı giderek artıyor. Modern betik dilleri modern programlama dilleri kavramlarını gayet güzel içeriyorlar. Betik dilleri çalakalem yazmaya pek uygun. Programcılar var olan modern teknikleri kullanmaktan nedense kaçıyorlar. Bu tekniklerden biri de Exception kullanımı. Uyarı: Yerinde ve kararınca kullanmazsanız, işinizi kolaylaştırmak yerine kodunuzu gerçekten karıştırabilirsiniz.

Exception nedir? Bir akış kontrol yöntemi begin # e yaratabilecek bir kod catch Exception => e # e'yi işle def fonksiyonum # e yaratabilecek bir kod catch Exception => e # e'yi işle

Exception niye kullanılır? İyi program tasarımı, programın küçük ve amaca odaklı fonksiyonlara bölümlenmesini gerektirir. Hatanın ne olduğunu en iyi işi yapmaya çalışan bilir (en altlarda) Hatanın nasıl işleneceğini genelde işin yapılmasını isteyen bilir (daha yukarılarda) Aradaki aktarım için Exception'lar hata durumları için alternatif kontrol akış yolları sağlarlar.

Exception niye kullanılır? def a a_helper # a_helper başarılı oldu mu? def a_helper a_helper_helper def a_helper_helper # burada hata dönmemiz gerek

Exception niye kullanılır? def a sonuc = a_helper if sonuc # a_helper başarılı oldu else # a_helper başarısız oldu def a_helper sonuc = a_helper_helper return nil unless sonuc def a_helper_helper # burada hata dönmemiz gerek return nil # ya nil de dönebilmemiz gerekiyorsa?

Exception niye kullanılır? def a begin a_helper rescue Exception => e # a_helper başarılı olamadı # a_helper başarılı oldu def a_helper a_helper_helper def a_helper_helper raise 'hell' if not_good def a a_helper # a_helper başarılı oldu rescue Exception => e # a_helper başarılı olamadı

Ruby'de Exception BasicObject Exception IRB::Abort NoMemoryError ScriptError LoadError Gem::LoadError NotImplementedError SyntaxError SecurityError SignalException Interrupt StandardError ArgumentError EncodingError Encoding::CompatibilityError Encoding::ConverterNotFoundError Encoding::InvalidByteSequenceError Encoding::UndefinedConversionError Exception2MessageMapper::ErrNotRegisteredExce ption FiberError IOError EOFError IRB::CantChangeBinding IRB::CantReturnToNormalMode IRB::CantShiftToMultiIrbMode IRB::IllegalParameter IRB::IrbAlreadyDead IRB::IrbSwitchedToCurrentThread IRB::NoSuchJob IRB::NotImplementedError IRB::Notifier::ErrUndefinedNotifier IRB::Notifier::ErrUnrecognizedLevel IRB::SLex::ErrNodeAlreadyExists IRB::SLex::ErrNodeNothing IRB::UndefinedPromptMode IRB::UnrecognizedSwitch IndexError KeyError StopIteration LocalJumpError Math::DomainError NameError NoMethodError RangeError FloatDomainError

Ruby'de Exception RegexpError RubyLex::AlreadyDefinedToken RubyLex::SyntaxError RubyLex::TerminateLineInput RubyLex::TkReading2TokenDuplicateError RubyLex::TkReading2TokenNoKey RubyLex::TkSymbol2TokenNoKey RuntimeError Gem::Exception Gem::CommandLineError Gem::DepencyError Gem::DepencyRemovalException Gem::DocumentError Gem::EndOfYAMLException Gem::FilePermissionError Gem::FormatException Gem::GemNotFoundException Gem::GemNotInHomeException Gem::InstallError Gem::InvalidSpecificationException Gem::OperationNotSupportedError Gem::RemoteError Gem::RemoteInstallationCancelled Gem::RemoteInstallationSkipped Gem::RemoteSourceException Gem::VerificationError SystemCallError ThreadError TypeError ZeroDivisionError SystemExit Gem::SystemExitException SystemStackError fatal

Rails'de Exception Rails exception yönetmek için ki eklentisi, ve ki exception tanımları ile geliyor. class ApplicationController < ActionController::Base rescue_from User::NotAuthorized, :with => :deny_access # self defined exception rescue_from ActiveRecord::RecordInvalid, :with => :show_errors rescue_from 'MyAppError::Base' do exception rer :xml => exception, :status => 500 protected def deny_access def show_errors(exception) exception.record.new_record??

Ruby'de neden rescue_from yok? Yazması çok mu basit? Hayır. Bir nesne veya sınıfın herhangi bir fonksiyonunda oluşan bir Exception'ı yakalayıp yönlirebilmesi gerekiyor. Ruby'de call stack'te araya girmek için bir yöntem yok (çağrı zamanında fonksiyon sarmalamak mümkün değil) Olmasına gerek mi yok? Tartışılır.

Exceptionist (çok yakında) Bir de şu durumlar var: Bir sınıf metodunda ortaya çıkan Exception'ın belli bir metot ile işleneceğini belirtmek Bir nesne metodunda ortaya çıkan Exception'ın belli bir metot ile işleneceğini belirtmek Epeyce kurcaladıktan sonra, ruby izin vermese de bu işi yapmanın mümkün olduğunu keşfettim galiba :) https://github.com/mdasheg/exceptionist

Exceptionist (çok yakında) # class A # # Two alternative definitions of a handler for a given exception. # # my_method is an instance method, and :instance_method is a keyword. # rescue_exception MyException, :in => :my_method, :with => :handler_method # rescue_exception MyException, :in => [:instance_method, :my_method], # :with => :handler_method # # # definition of a specific handler for a given exception. # # my_method is a singleton method # rescue_exception MyException, :in => :my_method, :with => :handler_method # rescue_exception MyException, :in => [:singleton_method, :my_method], # :with => :handler_method # # # definition of a catch-all exception handler for a given method # rescue_exceptions :in => my_method, :with => :another_handler_method # # # definition of a catch-all exception handler for all instance methods # rescue_exceptions :with => :handler_for_all_methods #

Exceptionist Niye çok yakında? Yorumlayıcıya yakın bir düzeyde ve her nesne/sınıfa burnunu sokan bir gem. Doğru ve performanslı çalıştığından emin olmak gerekiyor. Testlerinin yazımı devam ediyor. Genişletilebileceği bazı yönler var.

Sorular ve sohbet