EPI: Interfejs Graficzny Wykład nr 2 Wbudowane typy danych Rubiego



Podobne dokumenty
EPI: Interfejs Graczny 2009/2010 Wbudowane typy danych

1. Podstawy budowania wyra e regularnych (Regex)

Wprowadzenie do języka Ruby

Programowanie w Ruby

Pętle w PERLU postać ogólna

Programowanie w Ruby

Zagadnienia do egzaminu ustnego z matematyki dla Uzupełniającego Liceum Ogólnokształcącego dla Dorosłych - III semestr

Wykład nr 1 Język Ruby i framework Rails

Wartości domyślne, szablony funkcji i klas

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Programowanie obiektowe

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

PAKIET MathCad - Część III

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

SCRIBA JUNIOR SCRIBA JUNIOR I

1. Rozwiązać układ równań { x 2 = 2y 1

Algorytmika i Programowanie VBA 1 - podstawy

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Import i eksport danych w systemie biznes.toyotabank.pl

znaczeniu określa się zwykle graficzne kształtowanie tekstu za pomocą dostęp-

Podstawy programowania w języku C

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Wstęp do ruby dla programistów javy

1. Wprowadzenie do C/C++

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Promocja i identyfikacja wizualna projektów współfinansowanych ze środków Europejskiego Funduszu Społecznego

Urządzenie do odprowadzania spalin

Elementy cyfrowe i układy logiczne

Podstawy Informatyki Gramatyki formalne

Matematyka dla liceum/funkcja liniowa

for (i=1; i<=10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

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

Zasady wizualizacji PROW

Kurs wyrównawczy dla kandydatów i studentów UTP

Środowisko programisty

Algorytmy i Struktury Danych.

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Podstawy programowania

Kilka zasad o których warto trzeba pamiętać

Obliczenia arytmetyczne. Konkatenacja pól. Aliasy kolumn. Aliasy tabel. Co dalej? Rozdział 4. Korzystanie z funkcji. Zastosowanie funkcji

z programowania z przykładowymi rozwiązaniami

Formularz Zgłoszeniowy propozycji zadania do Szczecińskiego Budżetu Obywatelskiego na 2016 rok

'()(*+,-./01(23/*4*567/8/23/*98:)2(!."/+)012+3$%-4#"4"$5012#-4#"4-6017%*,4.!"#$!"#%&"!!!"#$%&"#'()%*+,-+

UNIWERSYTET TECHNOLOGICZNO-HUMANISTYCZNY im. Kazimierza Pułaskiego w Radomiu PRACA DYPLOMOWA MAGISTERSKA

INŻYNIERIA TRANSPORTOWA TRANS OPRACOWANIE POMIARÓW RUCHU

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

EPI: Interfejs Graczny 2009/2010 Podstawy Rubiego

1. Wprowadzenie do C/C++

2.Prawo zachowania masy

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Centralizacji Systemu. Procedury zasilania danymi systemu LAS oprogramowania do aktualizacji LMN. etap C13 pkt 5

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Wydawnictwo Helion ul. Koœciuszki 1c Gliwice tel

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

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

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

XIII KONKURS MATEMATYCZNY

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

Warsztat naukowca a problem formatu informacji bibliograficznej generowanej przez systemy informacyjne. Remigiusz Sapa IINiB UJ

OBCIĄŻENIE ODWROTNE W HERMESIE

Uniwersytet Rzeszowski

Python. Wprowadzenie. Jolanta Bachan

Tworzenie wypowiedzi o kompozycji.

Elektronika i techniki mikroprocesorowe

DrawCut Label Studio

PROJEKT STAŁEJ ORGANIZACJI RUCHU

KLAUZULE ARBITRAŻOWE

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Tworzenie modelu obiektowego

G PROGRAMMING. Part #6

Środowisko programisty Zestaw 7

INSTRUKCJA OBSŁUGI WD2250A. WATOMIERZ 0.3W-2250W firmy MCP

Automatyka. Etymologicznie automatyka pochodzi od grec.

Wyrażenia regularne. Wyrażenia regularne 1/41

ZASADY REPRODUKCJI SYMBOLI GRAFICZNYCH PRZEDMOWA

PODSTAWY DZIAŁANIA UKŁADÓW CYFROWYCH

Grupa bezpieczeństwa kotła KSG / KSG mini

Ściągawka z Matlaba / Octave

Analiza systemowa. Andrzej Łachwa Bazy danych 12+/15

MATERIAŁY DO ZAJĘĆ II

Pracownia internetowa w ka dej szkole (edycja 2004/2005)

KONKURSY MATEMATYCZNE. Treść zadań

G PROGRAMMING. Part #4

SYSTEM SMAROWANIA LUBETOOL

Procedura weryfikacji badania czasu przebiegu 1 paczek pocztowych

Wtedy wystarczy wybrać właściwego Taga z listy.

enova Workflow Obieg faktury kosztowej

Zaawansowany kurs języka Python

Podstawy programowania skrót z wykładów:

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

6ka.pl Użytkownik:, Data:

Informatyka, I stopień. Programowanie (PRO300.1)

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

GRAFIKA PROGRAMOWANA W PASCALU ==================================

PRZYBLI ONE METODY ROZWI ZYWANIA RÓWNA

Metody numeryczne I. Programy wspomagajace obliczenia Maxima. Janusz Szwabiński.

Transkrypt:

EPI: Interfejs Graficzny Wykład nr 2 Wbudowane typy danych Rubiego 8 października 2014

Plan prezentacji Łańcuchy Liczby Symbole i zakresy W. regularne Kontenery Pliki Materiały

Łańcuchy znaków (Ruby 1.9) sekwencje znaków (a nie bajtów) wsparcie dla Unicode oraz innych kodowań ograniczane za pomocą lub " cytowanie apostrofów: 'test pojedynczego cudzysłowu: \'' "test podwójnego cudzysłowu: \"" tylko łańcuchy ograniczone podwójnymi cudzysłowami mogą być interpolowane : value = 'EPI' "Witaj #{value}!" 'Witaj #{value}!'

Łańcuchy wielowierszowe zaczynają się od pary znaków << i ciągu znaków, który ma symbolizować koniec łańcucha: str = <<END_OF_STRING Siała baba mak Nie wiedziała jak Dziadek wiedział Nie powiedział A to było tak... END_OF_STRING

Operacje na łańcuchach Mnożenie i konkatenowanie: "Witaj "+"EPI" #=> "Witaj EPI" "EPI "*3 #=> "EPI EPI EPI " greeting = "Witaj" greeting << " EPI" greeting << "!!!" #=> "Witaj EPI!!!" Badanie zawartości łańcucha: "Test".empty? #=> false "świat".length "świat".size #=> 5, zarówno dla kodowani ISO jak i UTF-8 #=> 5, to samo co length "paczka".index('a') #=> 1 "paczka".rindex('a') #=> 5 "świat"[0..3] "świat"[-3..-1] #=> "świa" #=> "iat"

Operacje na łańcuchach Manipulowanie łańcuchami: "TEST".downcase #=> "test" "ŚWIAT".downcase #=> "Świat"!!! require 'string_case_pl' "ŚWIAT".downcase #=> "świat" "223".to_i #=> 223 "223.5".to_i #=> 223 "223.5".to_f #=> 223.5 "FF".to_i(16) #=> 255 "101010".to_i(2) #=> 42 "zbyt wiele spacji ".squeeze(" ") #=> "zbyt wiele spacji " " początkowe i końcowe spacje ".strip #=> "początkowe i końcowe spacje" "Cześć! Jak się masz?".split #=> ["Cześć!","Jak","się","masz?"] "Cześć! Jak się masz?".split(/[!\?]?/) #=> ["Cześć","Jak się masz"] "hello \n".chomp #=> "hello " "hello...".sub(/\./,'!') #=> "hello!.." "hello...".gsub(/\./,'!') #=> "hello!!!"

Operacje na łańcuchach Konwencja nazewnicza: operacje modyfikujące i niemodyfikujące downcase - zwraca nowy łańcuch downcase! - modyfikuje oryginalny łańcuch first_name = "Janek" first_name.downcase #=> "janek" puts first_name #=> Janek first_name.downcase! #=> "janek" puts first_name #=> janek first_name.downcase! #=> nil! Łączenie operacji: "POWITANIE ZE SPACJJAMI".squeeze.strip.downcase #=> "powitanie ze spacjami" "powitanie ze spacjami".squeeze!.strip!.downcase! # NoMethodError: undefined method `strip! for nil:nilclass

Liczby liczby całkowite obiekty klasy Fixnum lub Bignum liczby zmiennopozycyjne obiekty klasy Float zamiana typu jest automatyczna: a = 5 #=> 5 a.class #=> Fixnum a = a + 1.0 #=> 6.0 a.class #=> Float ale może prowadzić do niespodzianek: a = 5 a / 2 #=> 2 a / 2.0 #=> 2.5 jawna konwersja typów: 7.5.to_i #=> 7 8.to_f #=> 8.0 8.5.to_s #=> "8.5" 8.to_s(2) #=> "1000"

Podstawowe operacje na liczbach Przypisanie równoległe (nie tylko liczby): a = 2 a,b = 3,4 Operacje arytmetyczne: + dodawanie - odejmowanie * mnożenie / dzielenie % dzielenie modulo ** potęgowanie Math::log() logarytm naturalny Math::sqrt() pierwiastek

Podstawowe operacje na liczbach Obiektowa interpretacja operacji arytmetycznych: 2 + 3 * 7 #=> 2.+(3.*(7)) Operatory zachowują swoje naturalne priorytety (np. mnożenie wykonywane jest przed dodawaniem). Operatory porównania: <, <=, ==, >=, > <=> komparator: 2 <=> 2 #=> 0 2 <=> 3 #=> -1 2 <=> 0 #=> 1

Liczby jako obiekty 0.zero? 0.nonzero? 10.between?(12,15) 2.5.integer? #=> true #=> false #=> false #=> false b = 5.5 b.round #=> 6 c = -7 c.abs #=> 7 7.succ #=> 8 3.times{ i puts "Witaj EPI po raz #{i+1}!"} # Witaj EPI po raz 1! # Witaj EPI po raz 2! # Witaj EPI po raz 3! require 'active_support/time' 3.days.ago #=> 2011-10-08 10:06:54 +0200

Symbole Symbol reprezentuje w Rubim pewną nazwę. Jest tworzony automatycznie poprzez użycie :dwukropka na początku nazwy: :ruby Tylko jeden obiekt klasy Symbol o danej nazwie jest tworzony w ciągu całego wykonania programu: f1,f2 = :ruby,:ruby f1.object_id f2.object_id #ten sam obiekt f1,f2 = "ruby","ruby" f1.object_id f2.object_id #dwa różne obiekty

Zakresy 1..10 (zawiera 10) 1...10 (nie zawiera 10) a = 1..10 a.min #=> 1 a.max #=> 10 a.include?(10) #=> true jako sekwencje: (1..10).to_a #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] jako interwały: (1..10) === 5 #=> true (1..10) === 3.1415 #=> true

Wyrażenia regularne obiekty klasy Regexp zapisywane z wykorzystaniem ukośników, np. /hel.*/ definiują wzorce dopasowywane do łańcuchów wszystkie znaki dopasowywane są do siebie samych, z wyjątkiem znaków specjalnych (metaznaków):.,, (, ), [, {, +, \,, $, *,? aby dopasować znak specjalny, należy poprzedzić go odwrotnym ukośnikiem \ = operator dopasowania

Kotwice ˆdopasowuje początek linii \A dopasowuje początek łańcucha $ dopasowuje koniec linii \Z dopasowuje koniec łańcucha /hel/ /hel/ = "hello" /hel/ = "goodbye" /ˆhel/ /hel$/ # dopasowuje "hel" w dowolnym miejsu łańcucha #=> 0 - indeks początku dopasowania #=> nil - brak dopasowania # dopasuj tylko na początku # dopasuj tylko na końcu

Powtórzenia i alternatywa Powtórzenia: jeśli r jest aktualnym znakiem, to: r* dopasowuje zero lub więcej wystąpień r r+ dopasowuje jedno lub więcej wystąpień r r? dopasowuje zero lub jedno wystąpienie r r{m,n} dopasowuje co najmniej m i co najwyżej n wystąpień r r{m,} dopasowuje co najmniej m wystąpień r "aaaabc" = /a*/ #=> dopasuje "aaaa" "aaaabc" = /a*b?/ #=> dopasuje "aaaab" "aaaac" = /a*b?/ #=> dopasuje "aaaa" "abaac" = /a{2}/ #=> dopasuje "aa" Alternatywa: a b dopasowuje jedną z alternatyw "witaj" = /witaj żegnaj/ #=> dopasuje "witaj"

Operacje na wyrażeniach regularnych Klasy znaków: [] dopasowuje dokładnie jeden ze znaków wymienionych w nawiasie Skróty klas znaków. dowolny znak (oprócz końca linii) \d [0-9] cyfry \D [ 0-9] nie-cyfry \s [\s\t\r\n\f] białe spacje \S [ \s\t\r\n\f] nie-białe spacje \w [A-Za-z0-9_] znaki alfanumeryczne (ale nie ą, ę, itp.) \W [ A-Za-z0-9_] znaki nie-alfanumeryczne \p{l} [[:letter:]] litery (np. A, B, c, ą) \p{lu} [[:upper:]] wielkie litery (np. A, B, C, Ą)

Przykłady wyrażeń /hel.*/ /hello!?/ /hello!+/ /hello[!\.]/ /ˆ[A-Z][a-z]+$/ /ˆ\p{Lu}\p{Ll}+$/ /ˆala/ /\Aala/ /ˆ\d{2}-\d{3}$/ /Ala i kot Jola/ /ˆAla i kot Jola$/ # dopasowuje "hello" # dopasowuje "hello" i "hello!" # dopasowuje "hello!!!!!", ale nie "hello" # dopasowuje "hello!" i "hello." # dopasowuje "Warszawa", ale nie "Łódź" # dopasowuje "Warszawa" oraz "Łódź" # dopasowuje "ala" oraz "kot\nala" # dopasowuje "ala", ale nie "kot\nala" # dopasowuje "33-310", "44-100", etc. # dopasowuje "Ala i kot" i "Jola" # dla "Ala i Jola" dopasowuje tylko "Jola" # dopasowuje "Ala i kot" na początku linii # oraz "Jola" na końcu linii

Grupowanie () wszystko wewnątrz nawiasów traktowane jest jako pojedyncze wyrażenie /hello (John James)!/ Przechwytywanie podgrup: match_data = /([a-za-z]+) ([a-za-z]+)/.match("123jan Kowalski456") #=> #<MatchData:0xb7aa6b8c> match_data[0] #=> "Jan Kowalski", inaczej $ match_data[1] #=> "Jan", inaczej $1 match_data[2] #=> "Kowalski", inaczej $2 match_data.pre_match #=> "123", inaczej $` match_data.post_match #=> "456", inaczej $ "123Jan Kowalski456".sub(/([a-zA-Z]+) ([a-za-z]+)/,"\\2 \\1") #=> "123Kowalski Jan456"

Tablice arr = ["Fred",1,3.14] arr[0] #=> "Fred" arr[1] #=> 1 arr[-1] #=> 3.14 arr[-2] #=> 1 arr[0..1] #=> ["Fred",1] arr[-2..-1] #=> [1, 3.14] arr[0] = "Wilma" arr #=> ["Wilma",1,3.14] arr[0..1] = ["Fred",10] arr #=> ["Fred",10,3.14] Array.new #=> [] Array.new(3) #=> [nil, nil, nil] Array.new(3,"a") #=> ["a", "a", "a"] arr = %w(fred wilma barney betty the\ flintstones) #=> ["fred", "wilma", "barney", "betty", "the flintstones"]

Operacje na tablicach a = [1,2,3] b = [3,4] a + b #=> [1,2,3,3,4] a - b #=> [1,2] a b #=> [1,2,3,4] a b #=> [3] a = [2,3] a << 2 #=> [2,3,2] a.push(5) #=> [2,3,2,5] a.unshift(1) #=> [1,2,3,2,5] a.pop #=> 5 a #=> [1,2,3,2] a = [1,2,3] a.combination(2).to_a #=> [[1, 2], [1, 3], [2, 3]] a.permutation(2).to_a #=> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]

Operacje na tablicach a = [1,2,3,4] a.length #=> 4 a.empty? #=> false a.reverse #=> [4,3,2,1] a.first #=> 1 a #=> [1,2,3,4] a.shift #=> 1 a #=> [2,3,4] a.last #=> 4 a #=> [2,3,4] a.pop #=> 4 a #=> [2,3]

Operacje na tablicach a = ["a",nil,"b","b",nil,"c"] a.compact a a.compact! a a.uniq! a.join(", ") #=> "a, b, c" a * ", " #=> "a, b, c" a.delete("a") a a.delete_at(1) a #=> ["a","b","b","c"] #=> ["a",nil,"b","b",nil,"c"] #=> ["a","b","b","c"] #=> ["a","b","b","c"] #=> ["a","b","c"] #=> "a" #=> ["b", "c"] #=> "c" #=> ["b"] a == ["b"] #=> true

Tablice asocjacyjne h = {"name" => "Fred", "surname" => "Flintstone"} h["name"] #=> "Fred" h["name"] = "Wilma" #=> {"name" => "Wilma", "surname" => "Flintstone"} h[:name] = "Wilma" #=> {"name" => "Wilma", "surname" => "Flintstone", :name => "Wilma"} h1 = Hash.new # to samo co {} h1[:foo] #=> nil h2 = Hash.new(0) h2[:foo] #=> 0

Tablice asocjacyjne h = {:foo => "bar", :bar => "baz"} h.empty? #=> false h.size #=> 2 h.length #=> 2 h.include?(:foo) h.has_key?(:foo) h.has_value?("bar") h.index("bar") #=> true #=> true #synonim include? #=> true #=> :foo h.keys #=> [:bar, :foo] h.values #=> ["baz","bar"] h.delete(:foo) #=> "bar" h.clear #=> {}

Operacje na plikach file = File.open("plik.txt") file.each do line puts line end file.close File.open("plik.txt","r:iso-8859-2") do file file.each do line puts line end end File.open("plik.txt","w:utf-8") do file 10.times do index file.puts "Zażółć gęślą jaźń" end end

Operacje na plikach i katalogach Dir.glob("*.txt").each do file_name File.open(file_name,"w") do file if file.file? file.chmod(0600) end end end `ls *.txt`.split("\n").each do file_name File.open(file_name,"w") do file if file.file? file.chmod(0600) end end end

Materiały Dokumentacja typów podstawowych http://railsapi.com Typy standardowe języka http://www.apohllo.pl/dydaktyka/ruby/intro/typy-danych

Pytania PYTANIA?