Wstęp do ruby dla programistów javy



Podobne dokumenty
Programowanie obiektowe

Metaprogramowanie w Ruby

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Platformy Programistyczne Podstawy języka Java

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 9. Wojciech Macyna

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Dokumentacja do API Javy.

Programowanie obiektowe

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Wykład 4: Klasy i Metody

Definiowanie własnych klas

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Klasy i obiekty cz II

Definicje klas i obiektów. Tomasz Borzyszkowski

Metody Metody, parametry, zwracanie wartości

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Wprowadzenie do języka Ruby

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Podstawowe części projektu w Javie

Wykład 2: Podstawy Języka

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie obiektowe

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Tworzenie aplikacji w języku Java

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie, algorytmy i struktury danych

Polimorfizm. dr Jarosław Skaruz

Technologie cyfrowe semestr letni 2018/2019

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

DYNAMICZNE PRZYDZIELANIE PAMIECI

Technologie cyfrowe semestr letni 2018/2019

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Programowanie obiektowe

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Wprowadzenie do języka Java

Java EE produkcja oprogramowania

Programowanie obiektowe

Diagram stanów Laboratorium 9

Kurs WWW. Paweł Rajba.

KLASY, INTERFEJSY, ITP

Wykład 5: Więcej o Klasach i Metodach

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Podstawy otwartych języków programowania Przechowywanie danych

Podstawy programowania obiektowego

Dawid Gierszewski Adam Hanasko

Programowanie obiektowe

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Programowanie obiektowe

TYPY GENERYCZNE (GENERICS)

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie w Ruby

KOTLIN. Język programowania dla Androida

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Programowanie obiektowe

1 Atrybuty i metody klasowe

Programowanie w Internecie. Java

Podstawy Języka Java

Wykład 8: Obsługa Wyjątków

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Programowanie Komputerów

SWIFT. Zaawansowane Programowanie Obiektowe

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Multimedia JAVA. Historia

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Klasy abstrakcyjne, interfejsy i polimorfizm

Java. Programowanie Obiektowe Mateusz Cicheński

Transkrypt:

czyli dlaczego java ssie Akademickie Stowarzyszenie Informatyczne 26 lutego 2011

Podstawowe cechy Ruby vs Java Wieloparadygmatowy Imperatywny Typowanie Silne Dynamiczne Otwarte klasy Interpretowany Wszystko jest obiektem Ma przeładowanie operatorów Zorientowana obiektowo W większości imperatywna Typowanie Silne Statyczne Zamknięte klasy Kompilowana Prymitywne typy nie są obiektami

Hello world! puts "Hello world!" public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, World"); 1 linia 19 znaków 5 linii 106 znaków

Klasy i metody # Komentarz class NazwaKlasy # Musi być z dużej litery # Domyślnie publiczne def metoda a, b= domyślna_wartość def zrwoc_siebie # Jeśli nie ma return x, to # metody zawsze zwracają to # co zwraca ostatnia linia. # return x działa jak w javie. self // Komentarz class NazwaKlasy { public Typ metoda(typ a, String b) { // Nie da się zrobić domyślnej wartości if(b == null) { b = "domyślna wartość"; public NazwaKlasy zwroc_siebie() { return this; def self.metoda_statyczna public static Typ metoda_statyczna() {

Klasy i metody # Komentarz class NazwaKlasy # Musi być z dużej litery def lista_arg *args # args jest tablicą # ale metode wywoluje sie # lista_arg 1,2,3,4,5 # zamiast lista_arg [1,2,3,4,5] protected # Dalej metody chronione def metoda_chroniona1 # Wywołanie metody, nawiasy # nie są potrzebne metoda_chroniona2 // Komentarz class NazwaKlasy { public Typ lista_argumentow(typ... args) { protected Typ metoda_chroniona1() { metoda_chroniona2(); protected Typ metoda_chroniona2() { def metoda_chroniona2

Tworzenie zmiennych tablica = [1,2,3,4,5] tablica = (1..5).to_a # to samo slownik = { klucz => wartość, klucz2 => wartość2 a,b,c = 1,2,3 obj = Object.new // Powinien być ArrayList int[] tablica = {1,2,3,4,5; import java.util.hashmap; HashMap<String, String> slownik = new HashMap<String, String>; slownik.put( klucz, wartość ); slownik.put( klucz2, wartość2 ); int a = 1, b = 2, c = 3; Object obj = new Object();

If, else itp. a = 42 b = nil if a == 5 puts "A jest równe 5" elsif a == 23 puts "A jest równe 23" elsif a # równoznaczne z a!= nil && a!= false puts "A jest prawdziwe" else puts "A jest fałszywe" puts "B jest prawdziwe" if b puts "B jest fałszywe" unless b int a = 42; int b = null; if(a == 5) { System.out.println("A jest równe 5"); else if(a == 23) { System.out.println("A jest równe 23"); else if(a!= null) { System.out.println("A jest prawdziwe"); else { System.out.println("A jest fałszywe"); if(b!= null)system.out.println("b prawdziwe"); if(b == null)system.out.println("b fałszywe");

Pętle i operacje na zbiorach 5.times do i puts i tablica = [1,2,3,4,5] tablica.each do element puts element while "cokolwiek prawdziwego" puts "Nieskończona pętla!" tablica.map { e e*2 # => [2,4,6,8,10] # To samo, ale zmienia zawartośc tablicy # zamiast zwracać nową. tablica.map! { e e*2 for(int i = 0; i < 5; i++) { System.out.println(i); int[] tablica = {1,2,3,4,5; for(int element: tablica) { System.out.println(element); while(true) { System.out.println("Nieskończona pętla!"); int[] nowatablica = new int[10]; for(int e: tablica) { nowatablica[i] = e*2; for(int i = 0; i < tablica.length; i++) { int e = tablica[i]; tablica[i] = e*2; // A jak to zrobić na kolekcjach?

Pętle i operacje na zbiorach tablica = [1,2,3,4,5] tablica.reduce { suma, e suma + e # => 15 tablica.reduce(:+) # to samo krócej, też => 15 tablica.select { e e % 2 == 0 # => [2,4] # Metody z nazwami kończącymi się! # najczęściej zmieniają sam obiekt, # zamiast zwracać nowy. tablica.select! { e e % 2 == 0 int[] tablica = {1,2,3,4,5; int suma; for(int e: tablica) { suma += e; import java.util.arraylist; ArrayList<int> nowatablica = new ArrayList<int>; for(int e: tablica) { if(e % 2 == 0) { nowatablica.add(e); // Bezpośrednio się nie da, trzeba kombinować ArrayList<int> tmp = new ArrayList<int>; for(int e: tablica) { if(e % 2 == 0) { tmp.add(e); tablica = tmp.toarray();

Wyjątki begin raise Blad, "message" rescue Blad => e puts "blad #{e" rescue raise else # wykona się tylko jeśli # nie będzie żadnych wyjątków ensure puts zawsze się wykonam try { throw new Blad("message"); catch(blad e) { System.out.println("blad" + e.tostring()); catch(exception e) { throw e; # nie ma odpowiednika else finally { System.out.println( zawsze sie wykona ); rzuc_wyjatkiem rescue 5 # => 5

Domknięcia, czyli o co chodizło z pętlami Domknięcia to anonimowe funkcje przekazywane jako argument do metod. Nie mają odpowiedników w javie, za to w ruby są często używane. Ogólna składnia jakas_medota { arg1, arg2,... cialo_funkcji # lub jakas_metoda do arg1, arg2,... cialo_funkcji Od środka funkcji def jakas_metoda yield # wywołuje domknięcie # lub def jakas_metoda &block # w końcu wszystko jest obiektem, # więc domknięcie też block.call # wywołuje domknięcie

Symbole Notacja: :nazwa Każdy symbol o danej nazwie jest tym samym obiektem, co pozwala na szybsze porównywanie. Każdy stworzony symbol zostaje w pamięci do końca wykonania programu. Dobrze się ich używa jako kluczy hashy, jeśli są hardcoded.

Typy zmiennych, gettery i settery Typy zmiennych nazwa zmienna lokalna @nazwa zmienna instancji @@nazwa zmienna klasowa $nazwa zmienna globalna gettery i settery class Klasa attr_reader :nazwa # getter dla @nazwa attr_writer :nazwa # setter dla @nazwa attr_accessor :nazwa # getter + setter # Przykład: a = Klasa.new a.nazwa = 5 puts a.nazwa

Stringi i regexy Stringi a = 2 "String z interpolacją: #{a + 3" # => String z interpolacją: 5 Zwykły string: #{a + 3 # => Zwykły string: #{a + 3 %Q{ " #{a + 2 # => " 5 %q{ " #{a + 2 # => " #{a + 2 "%s %d" % [ printf!, a] # => printf! 2 "%<asdf>s %<asdf>s %<qwer>d" % {:asdf => printf, :qwer => a + 3 # => printf printf 5 Regexy /asdf/ # => Regexp if "qwertyasdfgh" =~ /w.*(as.*)/ # => Fixnum lub nil puts "$& zawiera cały pasujący string" puts "$1 zawiera pierwszy subpattern" puts $2..$9 zawierałyby kolejne, gdyby były

Suma liczb pierwszych <= 1000 Ruby 79 znaków (2..1000).reject { n (2..n-1).find { x n % x == 0.reduce(:+) # => 76127 Java 173 znaki int suma = 0; for(int i = 2; i <= 1000; i++) { bool found = false; for(int j = 2; j < n; j++) { if(i % j == 0) { found = true; break; if(!found) { suma += i;

Sortowanie liczb zespolonych wg modułu Ruby 80 znaków lista = [ 1 + 3.i, 5 + 1.i, 2 + 2.i ] puts lista.sort_by { c c.abs.join ", " Java 1039 znaków import java.util.collections; import java.util.comparator; import java.util.list; import java.util.arraylist; class Complex { private Double re; private Double im; public Double getre() { return re; public void setre(double re) { this.re = re; public Double getim() { return im; public void setim(double im) { this.im = im; public Double abs2() { return re * re + im * im; public Complex(Double re, Double im) { this.re = re; this.im = im; //...

Sortowanie liczb zespolonych wg modułu, ciąg dlaszy Java 1039 znaków //... class ComplexModuleComparator implements Comparator { public int compare(object a, Object b) { return ((Complex)a).abs2().compareTo(((Complex)b).abs2()); public boolean equals(object o) { return this == o; class ComplexSort { public static void main(string args[]) { List<Complex> lista = new ArrayList<Complex>(); lista.add(new Complex(1.0,3.0)); lista.add(new Complex(5.0,1.0)); lista.add(new Complex(2.0,2.0)); Collections.sort(lista, new ComplexModuleComparator()); for(complex c: lista) { System.out.println(c.getRe().toString() + " + " + c.getim().tostring() + "i");

Zdefiniujmy klasę Complex w ruby Ruby class Complex attr_accessor :re, :im # definiuje gettery i settery def initialize re, im @re, @im = re, im def abs Math.sqrt(re**2 + im**2) def to_s #rzutowanie na string "(#{@re + #{@imi)" class Fixnum def i Complex(0, self)

Quicksort, czyli wygoda dynamicznego typowania Ruby 218 znaków class Array def qsort return self if length < 2 pivot = self[length/2] select { i i < pivot.qsort + select { i i == pivot + select { i i > pivot.qsort Java 525 znaków public static <E exts Comparable<? super E>> List<E> quicksort(list<e> list) { if (list.size() <= 1) return list; E pivot = list.get(0); List<E> smaller = new LinkedList<E>(); List<E> bigger = new LinkedList<E>(); List<E> same = new LinkedList<E>(); //...

Quicksort, czyli wygoda dynamicznego typowania Java 525 znaków //... for (E i: list) { if (i.compareto(pivot) < 0) { smaller.add(i); else if(i.compareto(pivot) > 0) { bigger.add(i); else { same.add(i); smaller = quicksort(smaller); bigger = quicksort(bigger); smaller.addall(same); smaller.addall(bigger); return smaller;

Narzędzia irb interaktywny interpreter (czyli Read-Eval-Print Loop) ri dokumentacja (Przykład: ri Array) gem menedżer paczek rake ruby make

Pytania?