С PHP на ROR. Часть первая
Начну небольшую серию статей как я PHP программист осваивали потихоньку переходил на Ruby on Rails. Тут я буду объяснять часто требовательные функционал на PHP и его аналог на Ruby on Rails. Ну что же, начнем!
Масивы (Arrays)
Существует много различных способов создания массива (array) в PHP. Что нам нужно знать, так это то, что объекты Array и Hash включают в себя разные функциональные особенности PHP массивов.
Сортировка Масивов
Только чисельно-индексный массив может быть отсортирован в Ruby. Создать такой массив можно несколькими путями. Самый популярный – использование квадратных скобок с разделителем в виде запятой. Также используется %w{} для создания массива из списка строк. Ruby не сохраняет индексацию массива, как это делает PHP массив. Ruby массивы – это простые стеки, где индекс определяется лишь позицией элемента. Не возможно пропустить элемент Ruby массива.
PHP
-
// => array(0 => ‘chicago’, 1 => ‘london’, 2 => ‘paris’)
Ruby
-
array = ["chicago", "london", "paris"]
-
# or
-
array = %w{ chicago london paris }
-
-
p array
-
# => ["new york", "london", "paris"]
Ассоциативные массивы
Для создания ассоциативных массивов в Ruby используется хэш (hash). Наиболее распространенным синтаксисом для создания хэша в Ruby используются фигурные скобки с разделенных запятыми список ключевых пар. Запомните, что хеш не упорядочен. Если Вам нужно упорядочить ассоциативный массив, Вам потребуется создать массив объектов.
PHP
-
// => array(‘age’ => 26, ‘name’ => ‘Joe’, ‘country’ => ‘USA’)
Ruby
-
p {:age => 26, :name => "Joe", :country => "USA"}
-
# => {:age=>26, :country=>"USA", :name=>"Joe"}
Смешаные массивы
Можем создавать массивы с сочетание числовых и строковых ключей в Ruby с помощью хэшей (hash). PHP автоматически присваивает числовой индекс элементов без определенного ключа. Ruby отличается тем, что требует указать ключевое значение каждого элемента.
PHP
-
// => array(‘age’ => 25, 0 => 1, ‘name’ => ‘Joe’, 1 => 2)
Ruby
-
hash = {:age => 25, 0 => 1, :name => "Joe", 1 => 2}
-
p hash
-
# => {0=>1, :age=>25, 1=>2, :name=>"Joe"}
is_array
Мы можем убедиться, что переменная массив используя объект # is_a?.
PHP
-
// => true
Ruby
-
colors = ["red", "green", "blue"]
-
p colors.is_a?(Array)
-
# => true
count
Мы можем подсчитать количество элементов в массиве Ruby используя Array #length метод.
PHP
Ruby
-
numbers = [1, 2, 3]
-
puts numbers.length
-
# => 3
Важно помнить о том, что в то время как мы можем пропустить элементы массива в PHP, мы не можем это сделать в Ruby. Если добавить к десятому ключу элемент массива, Ruby будет заполнить недостающие элементы с нулевыми.
PHP
Ruby
-
numbers = [1, 2]
-
numbers[10] = 3
-
puts numbers.length
-
# => 11
list
Мы можем сделать эквивалентно PHP перечень элементов в Ruby с помощью параллельного назначения. В Ruby мы можем присвоить разделенных запятыми переменные элементов массива с помощью обычной запятой.
PHP
-
print $name; // => ‘Joe’
-
print $age; // => 25
-
print $hair; // => ‘blonde’
Ruby
-
attributes = ["Joe", 25, "blonde"]
-
name, age, hair = attributes
-
puts name # => "Joe"
-
puts age # => 25
-
puts hair # => "blonde"
range
Ruby может работать с диапазоном объектов чисел или строк.
PHP
-
// => array(0 => 0, 1 => 1, 2 => 2, 3 => 3)
-
-
foreach ($sequence as $item) {
-
print "$item, ";
-
}
-
// => 0, 1, 2, 3,
Ruby
-
sequence = 0..3
-
p sequence
-
# => 0..3
-
-
sequence.each {|item| print "#{item}, " }
-
# => 0, 1, 2, 3,
Точно так же, как в PHP, мы можем создать iterable ряд последовательных строк.
PHP
-
// => array(0 => ‘a’, 1 => ‘b’, 2 => ‘c’, 3 => ‘d’)
-
-
foreach ($alphas as $item) {
-
print "$item, ";
-
}
-
// => a, b, c, d,
Ruby
-
alphas = ‘a’..‘d’
-
p alphas
-
# => "a".."d"
-
-
alphas.each {|item| print "#{item}, " }
-
# => a, b, c, d,
in_array
Мы можем проверить элемент на существования в массиве с помощью функции Array#include?.
В PHP in_array имеет строгое аргументирование, который будет рассматривать какого типа объект. Ruby считает число 1 и строку ’1′ как же самое, и всегда будет действовать в эквивалент с PHP если присвоить strict = true для этой функции.
PHP
-
// => true
Ruby
-
fruit = ["apple", "banana", "kiwi"]
-
p fruit.include?("apple")
-
# => true
Точно так же, как PHP, Ruby можете проверить наличие элемента в массиве, даже если этот элемент массива (или любой другой объект).
PHP
-
// => true
Ruby
-
list = [["a", "b"], "c"]
-
p list.include?(["a", "b"])
-
# => true
Думаю на сегодня хватит. Удачи!
Встретил сайт, который решил все мои проблемы при переходе на ruby.
Rails for PHP developers, вещь! Снимает основной блок.
http://railsforphp.com/reference/
Меня мучает только один вопрос: что заставило Вас, Алексей, выучить руби? Он о-очень редко используется в странах СНГ … любопытство, надобность или он на самом деле хорош?
2ignar
Не популярный, не значит не прибыльный. Сейчас я на руби САМ создаю сайт от 2 до 5 дней в зависимости от сложности (с нуля, без всяких движков). Да и на руби можно писать оконные приложения.
ЗЫ Специально для Вас поищу одно видео, увидите что он очень популярен, просто до стан СНГ поздно доходит.
Ну я так понимаю, руби на рельсах только для небольших сайтецов.
Правильно?
А как на счёт джанги? Сравнение написать можешь, они вроде как конкуренты в своей области, или ты с ним не знаком?
Небольшие сайтецы? Про Твитер слышал?
Вот список – http://rubyonrails.org/applications
Django – это ж Питоновский фреймворк, а я же на Руби пишу.
Для руби знаю ещё Merb – http://merbivore.com/
Ну сравнивать Руби и Питон, да ещё и фреймворки… языки ещё понятно, но фреймворки на одном языке проще сравнивать.
Нет, не слышал. Поведай.
Какой список? ))
Ну обычно при выборе фреймворка у большинства разработчиков стоит выбор между Джанго и РОР. Каждый хвалит своё болото, хотелось бы посмотреть ОБЪЕКТИВНОЕ сравнение этих фреймворков.
Почему же, с руби и питоном по-моему всё ясно, с фреймворками не особо. Ну мне по крайней мере.
гы, пришло на почту со ссылкой, а тут не отображается.
Первая ссылка, на тему РоР и твитер, вот к чему привела
«твитер перестал тормозить благодаря собственной системе сообщений starling, а не «ферме побольше», по-поводу кластера вы тоже не правы, RoR в нынешнем состоянии не может нормально масштабироваться и потоко-небезопасен (это будет со следующей версии). »
http://209.85.129.132/search?q=cache:_SHRTFjQt80J:forum.0day.kiev.ua/index.php%3Fact%3DPrint%26client%3Dwordr%26f%3D87%26t%3D82624+%D0%A2%D0%B2%D0%B8%D1%82%D0%B5%D1%80+ROR&hl=ru&ct=clnk&cd=1&gl=ua&client=firefox-a
Да, не воспринимай всё так близко к сердцу, я ж просто интересуюсь, а не утверждаю, т.к. нечего мне утверждать по РоР. Я с ним не работал.
гы, пришло на почту со ссылкой, а тут не отображается.
Первая ссылка, на тему РоР и твитер, вот к чему привела
«твитер перестал тормозить благодаря собственной системе сообщений starling, а не «ферме побольше», по-поводу кластера вы тоже не правы, RoR в нынешнем состоянии не может нормально масштабироваться и потоко-небезопасен (это будет со следующей версии). »
http://209.85.129.132/search?q=cache:_SHRTFjQt80J:forum.0day.kiev.ua/index.php%3Fact%3DPrint%26client%3Dwordr%26f%3D87%26t%3D82624+%D0%A2%D0%B2%D0%B8%D1%82%D0%B5%D1%80+ROR&hl=ru&ct=clnk&cd=1&gl=ua&client=firefox-a
Да, не воспринимай всё так близко к сердцу, я ж просто интересуюсь, а не утверждаю, т.к. нечего мне утверждать по РоР. Я с ним не работал.
У меня ссылки с комментариев не отображаются…
2dont
>>У меня ссылки с комментариев не отображаются…
Это система против спама решила проверить, а вдруг ты спамиш, и оставила мне на одобрение коментарии
Насчет РОР, я скоро доделаю один сайт и сразу увидишь что и как.