Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.

Презентация:



Advertisements
Похожие презентации
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Advertisements

Объектная модель Ruby Денис С. Мигинский. Основные характеристики объектной модели Обязательные: Поддержка классов Поддержка описания поведения класса.
Занятие Регулярные выражения Памятка (основные элементы регулярных выражений): a+ – любая последовательность a a* – любая последовательность a или.
Занятие 1 Вопрос: Когда появилась Объектно- Ориентированная парадигма программирования?
Язык Python Универсальный язык программирования Интерпретируемый язык.
Занятие 4 def simple_iterator yield 2 # передача управления в блок итератора yield 7 yield 1 end simple_iterator {|i| puts i } 15. Итераторы изнутри.
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
Парадигмы программирования Денис С. Мигинский. Понятие парадигмы Парадигма (философия науки) – устоявшаяся система научных взглядов, в рамках которой.
Php Что такое php? PHP – это высокоуровневый язык программирования для WEB работающий по принципу транслирующего интерпретатора.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
PL/SQL Введение 1. Типы данных Типы доступные SQL (в Oracle) BOOLEAN CHAR NUMBER RECORD TABLE.
Занятие Language Reflection Language Reflection – способность объектов к рефлексии, то есть умение давать информацию об исключительно языковых свойствах.
Учитель НСШ Кумакшев А.Н, учитель БСШ2 Вахмистров Г.Г. Элективный курс по информатике «Процедуры и функции на языке Pascal».
Программирование на современном Фортране Занимает лидирующее положение среди языков программирования, ориентированных на решение научно-технических задач,
Операторы языка. Арифметические операторы Арифметические операторы Арифметические операторы Арифметические операторы Операторы сравнения Операторы сравнения.
Что такое структурный подход в программировании? Как он реализуется в ЯП Паскаль? Что такое процедура? Кто дает название процедуре? Где записывается процедура?
Операторы. Оператор выбора Оператор выбора Оператор выбора Оператор выбора Оператор присваивания Оператор присваивания Оператор присваивания Оператор присваивания.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Работу выполнили ученицы 9 «Б» класса Гордеева Татьяна и Шебаршова Рита.
Транксрипт:

Язык Ruby Денис С. Мигинский

Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип наименьшего удивления». Основные реализации:

Основные характеристики Ruby Динамический язык Сквозная объектная модель Поддержка исключений Автоматическая сборка мусора Поддержка метапрограммирования (в т.ч. интроспекция, evaluate) Поддержка элементов функционального программирования (блоки/замыкания, λ- выражения) Встроенная поддержка регулярных выражений

Hello, world! File.open(world_inhabitants.txt). readlines. each{|name| puts Hello, #{name}! }

Разделители выражений #комментарий a=1; b=2 #конец выражения, «;» можно не ставить c=a.to_f+ #выражение продолжается на следующей строке b.to_f d=a.to_f\ #явный перенос на следующую строку -b.to_f

Определения и вызовы функций def hello(name=anonymous) puts Hello, #{name}! end hello(world) hello Gustav hello

Строки (String) name=Richard I phrase=Hello, #{name}! phraseWrong=Hello, #{name}! puts phrase #Hello, Richard I! puts phraseWrong #Hello, #{name}!

Интервалы (Range) finish=3 (1..finish).each{|i| puts i} # (1...finish).each{|i| puts i} # 1 2

Массивы (Array) a = [10, 15, 20, 5] puts a.max #20 b = [10, 30, Richard I] puts b.max #Ошибка времени выполнения c = Array.new(10){|i| i*i} puts c #

Ассоциативные массивы (Hash) price={apple=>10, durian=>100 } price[carrot]=5 price.each{|fruit,price| puts "#{fruit} - #{price} } #carrot – 5 #durian – 100 #apple – 10

Управляющие структуры: if, unless #постфиксная форма return 0 if a>0 return 0 unless a0 return 0 else return 1 end if a==0 then … elsif a

Где искать истину? Ложь: nil экземпляры FalseClass Истина: все остальное puts false.class #FalseClass puts true.class #TrueClass a=nil puts a ? true : false #false a=false puts a ? true : false #false a=0 puts a ? true : false #true

Логические операторы a=[1,2] b=[3,4] puts a||b #1 2 puts a&&b #3 4 puts a||nil #1 2 puts nil||b #3 4 puts a&&nil #nil puts nil&&b #nil

Управляющие структуры: case year = 1905 countryName = case year when then Russian Empire when then USSR else Russian Federation end #Russian Empire #применяется оператор === puts ( ) === 1905 #true puts ( ) == 1905 #false

Destructuring (реорганизующее присваивание) arr = [1, 2, 3, 4, 5] a, b, _, *rest = arr puts a, b, rest # def sum(first, *rest) if rest.empty? first else first + sum(*rest) end puts sum *arr #15

Блоки и замыкания Блок – часть кода с собственным контекстом (т.е. изолированными локальными переменными). Блок как правило объявляется в одном контексте, а исполняется в другом. Блок может взаимодействовать с тем контекстом, в котором объявлен, т.е. является замыканием. Аналогом блока в Java является анонимный класс.

Применение блоков: функционал def nTimes (n) for i in (0...n) yield #вызов блока end nTimes(5) {puts Hello, world!}

Применение блоков: оператор каррирования def partial(firstVal, &fn) Proc.new {|*rest| fn.call(firstVal, *rest)} Proc.new {|*rest| yield(firstVal, *rest)} end puts partial(1) {|a,b| a+b}.call(2) puts partial(1, &:+).call(2)

Определение и вызов блока def func (&block) #функция, вызывающая блок yield( ) #вызов блока с параметрами block.call( ) #--//-- end #передача блока в качестве параметра функции func(scalar_params){| | } #определение блока, как объекта первого класса block=Proc.new {| | code} block=lambda {| | code} #вызов самостоятельно определеннорго блока block.call( )

Контроль параметров вызова fn=Proc.new{|a,b|(a||0)+(b||0} puts fn.call #0 fn=lambda{|a,b|(a||0)+(b||0} puts fn.call #error def fn(a,b) (a||0)+(b||0) end puts fn #error

Итераторы (2..5).inject(1){|f, i| f*=i} #120 == 5! (1..5).map {|i| i*i} #[1, 4, 9, 16, 25] File.open(world_inhabitants.txt). readlines. each{|name| puts Hello, #{name} }

module Enumerable: некоторые итераторы all? [{|obj| block } ] => true|false any? [{|obj| block } ] => true|false map {|obj| block } => array select {| obj | block } => array inject(initial){|memo, obj| block } => obj

Задача 1 Задан набор символов и число n. Опишите функцию, которая возвращает список всех строк длины n, состоящих из этих символов и не содержащих двух одинаковых символов, идущих подряд. Ограничения: не допускается использовать циклы; Пример: для символов 'а', 'b', 'c' и n=2 результат должен быть ("ab" "ac" "ba" "bc" "ca" "cb") с точностью до перестановки.