LINUX.ORG.RU

История изменений

Исправление Novator, (текущая версия) :

В стандартной библиотеке Python ты такое не увидишь. А в дополнительных библиотеках — как повезёт.

Мулька вся в том, что стандартные библиотеки питона вобще не позволяют ничего сделать. Например, работа с сокетами, упаковкой строк, работой с датой, терминалом, файлами, осью, потоками и т.д. в питоне требует дополнительных наркоманских классов (zmq, socket, struct, time, datetime, termios, fcntl, sys, os, threading),
в руби же всё это возможно из стандартных классов. Причём, программеру не нужно гадать как в питоне, а) методы там будут или функции, б) сколько промежуточных прослоек нужно нагородить, в) насколько всё это будет извращенски - в руби ты делаешь всегда одно и то же: берешь базовый класс, создаёшь объект и вызываешь метод, например:

client = TCPSocket.open('lor.ru', 6789)
client.send('Hello world')

Чтобы почувствовать «чуть больше порядка», присовокупи к этому работу с упаковкой строки и потоками (к-я неизбежна при работе с сокетами), и разница с руби станет очевидна.

пишешь foo() , то ты ЗНАЕШЬ что именно ты вызываешь! А вот кто-то будет читать твой ruby-код — он уже может только угадывать

Есть такая претензия. Но руби позволяет писать self.foo() для определённости, как в питоне. Другое дело, что это оставлено на выбор программиста. Если ты так хочешь, чтобы твой код был читабельным - пиши self.foo() и object.foo() везде.

UPD. И ещё один наркоманский косяк питона. В руби методы пишутся с маленькой буквы, а классы - с большой. В питоне же и классы, и методы - всё с маленькой, и такой код читается хреново, подсветка синтаксиса уже не может работать например:

import socket

sock = socket.socket()
sock.connect(('lor.ru', 6789))
sock.send('Hello world')

Сравни с тем, что выше.

Исправление Novator, :

В стандартной библиотеке Python ты такое не увидишь. А в дополнительных библиотеках — как повезёт.

Мулька вся в том, что стандартные библиотеки питона вобще не позволяют ничего сделать. Например, работа с сокетами, упаковкой строк, работой с датой, терминалом, файлами, осью, потоками и т.д. в питоне требует дополнительных наркоманских классов (zmq, socket, struct, time, datetime, termios, fcntl, sys, os, threading),
в руби же всё это возможно из стандартных классов. Причём, программеру не нужно гадать как в питоне, а) методы там будут или функции, б) сколько промежуточных прослоек нужно нагородить, в) насколько всё это будет извращенски - в руби ты делаешь всегда одно и то же: берешь базовый класс, создаёшь объект и вызываешь метод, например:

client = TCPSocket.open('lor.ru', 6789)
client.send('Hello world')

Чтобы почувствовать «чуть больше порядка», присовокупи к этому работу с упаковкой строки и потоками (к-я неизбежна при работе с сокетами), и разница с руби станет очевидна.

пишешь foo() , то ты ЗНАЕШЬ что именно ты вызываешь! А вот кто-то будет читать твой ruby-код — он уже может только угадывать

Есть такая претензия. Но руби позволяет писать self.foo() для определённости, как в питоне. Другое дело, что это оставлено на выбор программиста. Если ты так хочешь, чтобы твой код был читабельным - пиши self.foo() и object.foo() везде.

UPD. И ещё один наркоманский косяк и питона. В руби методы пишутся с маленькой буквы, а классы - с большой. В питоне же и классы, и методы - всё с маленькой, и такой код читается хреново, подсветка синтаксиса уже не может работать например:

import socket

sock = socket.socket()
sock.connect(('lor.ru', 6789))
sock.send('Hello world')

Сравни с тем, что выше.

Исходная версия Novator, :

В стандартной библиотеке Python ты такое не увидишь. А в дополнительных библиотеках — как повезёт.

Мулька вся в том, что стандартные библиотеки питона вобще не позволяют ничего сделать. Например, работа с сокетами, упаковкой строк, работой с датой, терминалом, файлами, осью, потоками и т.д. в питоне требует дополнительных наркоманских классов (zmq, socket, struct, time, datetime, termios, fcntl, sys, os, threading),
в руби же всё это возможно из стандартных классов. Причём, программеру не нужно гадать как в питоне, а) методы там будут или функции, б) сколько промежуточных прослоек нужно нагородить, в) насколько всё это будет извращенски - в руби ты делаешь всегда одно и то же: берешь базовый класс, создаёшь объект и вызываешь метод, например:

client = TCPSocket.open('lor.ru', 6789)
client.send('Hello world')

Чтобы почувствовать «чуть больше порядка», присовокупи к этому работу с упаковкой строки и потоками (к-я неизбежна при работе с сокетами), и разница с руби станет очевидна.

пишешь foo() , то ты ЗНАЕШЬ что именно ты вызываешь! А вот кто-то будет читать твой ruby-код — он уже может только угадывать

Есть такая претензия. Но руби позволяет писать self.foo() для определённости, как в питоне. Другое дело, что это оставлено на выбор программиста. Если ты так хочешь, чтобы твой код был читабельным - пиши self.foo() и object.foo() везде.