Python có cú pháp đơn giản và dễ đọc, khác với Ruby ở một số điểm chính. Dưới đây là một số so sánh giữa Python và Ruby để bạn dễ làm quen:
1. Cách khai báo biến
Ruby:
name = "Ruby"
age = 25
Python:
name = "Python"
age = 25
Python không cần từ khóa để khai báo biến, chỉ cần gán giá trị.
2. Hàm
Ruby:
def greet(name) "Hello, #{name}!"
end puts greet("Ruby")
Python:
def greet(name): return f"Hello, {name}!" print(greet("Python"))
- Python dùng
def
và kết thúc khối bằng dấu thụt lề (indentation), không cóend
.
3. Câu điều kiện
Ruby:
if age > 18 puts "Adult"
else puts "Minor"
end
Python:
if age > 18: print("Adult")
else: print("Minor")
- Python sử dụng dấu
:
để bắt đầu khối lệnh và thụt lề để xác định khối.
4. Vòng lặp
Ruby:
(1..5).each do |i| puts i
end
Python:
for i in range(1, 6): print(i)
- Python sử dụng
range
để tạo dãy số, và không cần khốido ... end
.
5. Mảng và Hash
Ruby:
arr = [1, 2, 3]
hash = {name: "Ruby", age: 25}
Python:
arr = [1, 2, 3]
hash = {"name": "Python", "age": 25}
- Hash trong Python là
dict
và sử dụng dấu ngoặc{}
cùng dấu:
để gán key-value.
6. Block
Ruby:
[1, 2, 3].map { |x| x * 2 }
Python:
list(map(lambda x: x * 2, [1, 2, 3]))
- Python không có block như Ruby, thay vào đó dùng hàm
lambda
hoặcdef
.
7. Class
Ruby:
class Person attr_accessor :name def initialize(name) @name = name end
end person = Person.new("Ruby")
puts person.name
Python:
class Person: def __init__(self, name): self.name = name person = Person("Python")
print(person.name)
- Python sử dụng từ khóa
class
và hàm khởi tạo là__init__
.
Dưới đây là một số so sánh bổ sung giữa cú pháp Python và Ruby ở các khía cạnh khác nhau:
8. Xử lý ngoại lệ
Ruby:
begin result = 10 / 0
rescue ZeroDivisionError => e puts "Error: #{e.message}"
end
Python:
try: result = 10 / 0
except ZeroDivisionError as e: print(f"Error: {e}")
- Python dùng
try-except
, không cần từ khóabegin
hayend
.
9. Kiểm tra giá trị nil
hoặc None
Ruby:
value = nil
puts "Value is nil" if value.nil?
Python:
value = None
if value is None: print("Value is None")
- Ruby dùng
nil
và phương thức.nil?
, trong khi Python dùngNone
và so sánh vớiis
.
10. Toán tử 3 ngôi
Ruby:
result = age > 18 ? "Adult" : "Minor"
Python:
result = "Adult" if age > 18 else "Minor"
- Python đảo ngược vị trí của điều kiện và kết quả so với Ruby.
11. Chuyển đổi kiểu dữ liệu
Ruby:
num = "42".to_i
str = 42.to_s
Python:
num = int("42")
str = str(42)
- Python sử dụng các hàm chuyển đổi như
int()
,str()
thay vì phương thức đối tượng.
12. Kiểm tra phần tử trong danh sách
Ruby:
arr = [1, 2, 3]
puts "Found" if arr.include?(2)
Python:
arr = [1, 2, 3]
if 2 in arr: print("Found")
- Python dùng từ khóa
in
, Ruby dùng.include?
.
13. Đọc và ghi file
Ruby:
File.open("example.txt", "w") { |file| file.puts "Hello, Ruby!" }
content = File.read("example.txt")
puts content
Python:
with open("example.txt", "w") as file: file.write("Hello, Python!") with open("example.txt", "r") as file: content = file.read() print(content)
- Python dùng cú pháp
with open()
để tự động đóng file sau khi xử lý.
14. Hàm ẩn danh
Ruby:
add = ->(x, y) { x + y }
puts add.call(2, 3)
Python:
add = lambda x, y: x + y
print(add(2, 3))
- Python dùng
lambda
thay cho toán tử->
trong Ruby.
15. Vòng lặp vô hạn
Ruby:
loop do puts "Infinite loop" break
end
Python:
while True: print("Infinite loop") break
- Python dùng
while True
để tạo vòng lặp vô hạn.
16. Gọi phương thức
Ruby:
"hello".upcase
Python:
"hello".upper()
- Python yêu cầu dấu
()
khi gọi phương thức, trong khi Ruby có thể bỏ qua nếu không có tham số.
17. Cấu trúc dữ liệu tập hợp (Set)
Ruby:
require 'set' set = Set.new([1, 2, 3])
set.add(4)
puts set.include?(2)
Python:
set_data = {1, 2, 3}
set_data.add(4)
print(2 in set_data)
- Python hỗ trợ
set
như một kiểu dữ liệu tích hợp sẵn, trong khi Ruby cần thư việnSet
.
Dưới đây là thêm các so sánh khác giữa Python và Ruby để bạn hiểu rõ hơn về sự khác biệt:
18. Từ khóa self
Ruby:
class Person attr_accessor :name def initialize(name) @name = name end def greet "Hello, my name is #{self.name}" end
end
Python:
class Person: def __init__(self, name): self.name = name def greet(self): return f"Hello, my name is {self.name}"
- Python yêu cầu
self
trong mọi phương thức của lớp, trong khi Ruby chỉ cần khi truy cập thuộc tính hoặc gọi phương thức trong cùng lớp.
19. Kế thừa
Ruby:
class Animal def speak "I'm an animal" end
end class Dog < Animal
end dog = Dog.new
puts dog.speak
Python:
class Animal: def speak(self): return "I'm an animal" class Dog(Animal): pass dog = Dog()
print(dog.speak())
- Ruby dùng
<
để chỉ định kế thừa, trong khi Python dùng cú phápclass SubClass(SuperClass)
.
20. Module/Namespace
Ruby:
module Greetings def self.say_hello "Hello from Ruby!" end
end puts Greetings.say_hello
Python:
class Greetings: @staticmethod def say_hello(): return "Hello from Python!" print(Greetings.say_hello())
- Python không có
module
như Ruby, thường sử dụng class hoặc import file/module khác.
21. Sử dụng yield
Ruby:
def custom_each(arr) arr.each { |item| yield(item) }
end custom_each([1, 2, 3]) { |x| puts x * 2 }
Python:
def custom_each(arr): for item in arr: yield item for x in custom_each([1, 2, 3]): print(x * 2)
- Ruby sử dụng
yield
để gọi block, còn Python sử dụngyield
trong generator để trả về giá trị từng phần.
22. Truy cập phần tử
Ruby:
arr = [1, 2, 3]
puts arr[0] # 1
puts arr[-1] # 3
Python:
arr = [1, 2, 3]
print(arr[0]) # 1
print(arr[-1]) # 3
- Cú pháp gần giống nhau, nhưng Python có thể xử lý slicing mạnh mẽ hơn:
print(arr[1:]) # [2, 3]
23. Kiểm tra kiểu dữ liệu
Ruby:
puts 42.is_a?(Integer) # true
Python:
print(isinstance(42, int)) # True
- Python dùng hàm
isinstance()
thay vì phương thức.is_a?
.
24. Hàm toàn cục
Ruby:
puts "Hello, Ruby!"
Python:
print("Hello, Python!")
- Python sử dụng hàm
print()
như một hàm toàn cục, Ruby dùngputs
.
25. Toán tử logic
Ruby:
puts true && false # false
puts true || false # true
Python:
print(True and False) # False
print(True or False) # True
- Python dùng từ khóa
and
,or
,not
thay vì&&
,||
,!
như Ruby.
26. Mảng lồng nhau
Ruby:
matrix = [[1, 2], [3, 4]]
puts matrix[1][0] # 3
Python:
matrix = [[1, 2], [3, 4]]
print(matrix[1][0]) # 3
- Cú pháp truy cập tương tự, nhưng Python hỗ trợ thư viện như
numpy
để xử lý ma trận phức tạp hơn.
27. Gọi hàm không cần tham số
Ruby:
def greet "Hello!"
end puts greet
Python:
def greet(): return "Hello!" print(greet())
- Python luôn yêu cầu dấu
()
khi định nghĩa và gọi hàm, kể cả không có tham số.
28. Từ khóa unless
Ruby:
puts "Not an adult" unless age > 18
Python:
if not age > 18: print("Not an adult")
- Python không có từ khóa
unless
, phải dùngif not
.
Dưới đây là thêm các so sánh giữa Python và Ruby:
29. Kiểm tra độ dài của chuỗi hoặc mảng
Ruby:
str = "Ruby"
arr = [1, 2, 3] puts str.length # 4
puts arr.size # 3
Python:
str = "Python"
arr = [1, 2, 3] print(len(str)) # 6
print(len(arr)) # 3
- Python sử dụng hàm toàn cục
len()
để kiểm tra độ dài, trong khi Ruby sử dụng phương thức.length
hoặc.size
.
30. Câu lệnh case
hoặc switch
Ruby:
case language
when "Ruby" puts "Hello, Ruby!"
when "Python" puts "Hello, Python!"
else puts "Unknown language"
end
Python:
language = "Python" match language: case "Ruby": print("Hello, Ruby!") case "Python": print("Hello, Python!") case _: print("Unknown language")
- Python (từ phiên bản 3.10) hỗ trợ
match-case
, tương tựcase-when
trong Ruby.
31. Biểu thức chính quy
Ruby:
if "hello" =~ /ell/ puts "Match found"
end
Python:
import re if re.search("ell", "hello"): print("Match found")
- Python sử dụng thư viện
re
để làm việc với regex, trong khi Ruby hỗ trợ regex tích hợp sẵn.
32. Tạo danh sách mới từ danh sách cũ (List Comprehension)
Ruby:
arr = [1, 2, 3]
new_arr = arr.map { |x| x * 2 }
puts new_arr # [2, 4, 6]
Python:
arr = [1, 2, 3]
new_arr = [x * 2 for x in arr]
print(new_arr) # [2, 4, 6]
- Python có cú pháp
list comprehension
gọn hơn so vớimap
trong Ruby.
33. Tạo giá trị mặc định cho Hash hoặc Dict
Ruby:
hash = Hash.new(0)
hash[:key] += 1
puts hash[:key] # 1
Python:
from collections import defaultdict hash = defaultdict(int)
hash["key"] += 1
print(hash["key"]) # 1
- Python sử dụng
defaultdict
từ thư việncollections
để thiết lập giá trị mặc định.
34. Vòng lặp với chỉ số
Ruby:
arr = ["a", "b", "c"]
arr.each_with_index do |val, index| puts "#{index}: #{val}"
end
Python:
arr = ["a", "b", "c"]
for index, val in enumerate(arr): print(f"{index}: {val}")
- Python sử dụng
enumerate()
để lặp qua danh sách với chỉ số.
35. Cấu trúc Singleton
Ruby:
class Singleton @@instance = nil def self.instance @@instance ||= new end private_class_method :new
end obj = Singleton.instance
Python:
class Singleton: _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance obj = Singleton()
- Python sử dụng
__new__()
để đảm bảo chỉ có một instance của lớp được tạo.
36. Cấu trúc while
với giá trị
Ruby:
while line = gets puts line
end
Python:
while True: line = input() if not line: break print(line)
- Python yêu cầu kiểm tra điều kiện dừng trong vòng lặp, Ruby có thể gán giá trị trực tiếp trong
while
.
37. Câu lệnh break
, next
và redo
Ruby:
(1..5).each do |i| next if i == 3 break if i == 4 puts i
end
Python:
for i in range(1, 6): if i == 3: continue if i == 4: break print(i)
- Python có
break
vàcontinue
, nhưng không córedo
như Ruby.
38. Gọi phương thức động (Dynamic Method Call)
Ruby:
method_name = :upcase
puts "hello".send(method_name) # "HELLO"
Python:
method_name = "upper"
print(getattr("hello", method_name)()) # "HELLO"
- Python sử dụng
getattr()
để gọi phương thức động.
39. Thao tác với chuỗi
Ruby:
str = "hello"
puts str.capitalize # "Hello"
puts str.reverse # "olleh"
Python:
str = "hello"
print(str.capitalize()) # "Hello"
print(str[::-1]) # "olleh"
- Python sử dụng slicing
[::-1]
để đảo ngược chuỗi.
40. Giá trị mặc định cho tham số
Ruby:
def greet(name = "Guest") "Hello, #{name}!"
end puts greet # "Hello, Guest!"
puts greet("Ruby") # "Hello, Ruby!"
Python:
def greet(name="Guest"): return f"Hello, {name}!" print(greet()) # "Hello, Guest!"
print(greet("Python")) # "Hello, Python!"
- Python và Ruby đều hỗ trợ giá trị mặc định cho tham số, nhưng cú pháp khác nhau.
Dưới đây là thêm nhiều so sánh chi tiết hơn giữa Python và Ruby:
41. Phương thức tap
trong Ruby và tương tự trong Python
Ruby:
value = "hello".tap { |str| puts "Original: #{str}" }.upcase
puts value # "HELLO"
Python:
value = (lambda x: print(f"Original: {x}") or x)("hello").upper()
print(value) # "HELLO"
- Python không có phương thức
tap
, nhưng có thể sử dụng lambda hoặc custom utility để mô phỏng.
42. Tạo chuỗi lặp lại
Ruby:
puts "abc" * 3 # "abcabcabc"
Python:
print("abc" * 3) # "abcabcabc"
- Cú pháp giống nhau, cả hai đều hỗ trợ toán tử
*
cho chuỗi.
43. Kiểm tra số chẵn/lẻ
Ruby:
puts 4.even? # true
puts 5.odd? # true
Python:
print(4 % 2 == 0) # True
print(5 % 2 != 0) # True
- Ruby có phương thức tích hợp
.even?
và.odd?
, trong khi Python cần kiểm tra bằng phép chia lấy dư.
44. Đảo ngược danh sách hoặc mảng
Ruby:
arr = [1, 2, 3]
puts arr.reverse # [3, 2, 1]
Python:
arr = [1, 2, 3]
print(arr[::-1]) # [3, 2, 1]
- Python sử dụng slicing
[::-1]
, Ruby có.reverse
.
45. Từ khóa for
Ruby:
for i in 1..3 puts i
end
Python:
for i in range(1, 4): print(i)
- Ruby sử dụng
1..3
để tạo một range, Python sử dụngrange()
.
46. Tạo một chuỗi từ danh sách
Ruby:
arr = ["a", "b", "c"]
puts arr.join(", ") # "a, b, c"
Python:
arr = ["a", "b", "c"]
print(", ".join(arr)) # "a, b, c"
- Ruby sử dụng
.join
trên mảng, Python sử dụng.join
trên chuỗi.
47. Khởi tạo giá trị mặc định trong hàm
Ruby:
def greet(name = "Guest") "Hello, #{name}!"
end puts greet # "Hello, Guest!"
puts greet("Ruby") # "Hello, Ruby!"
Python:
def greet(name="Guest"): return f"Hello, {name}!" print(greet()) # "Hello, Guest!"
print(greet("Python")) # "Hello, Python!"
- Cả hai đều hỗ trợ giá trị mặc định cho tham số.
48. Kiểm tra key trong Hash/Dict
Ruby:
hash = { name: "Ruby", age: 25 }
puts hash.key?(:name) # true
Python:
dict_data = { "name": "Python", "age": 25 }
print("name" in dict_data) # True
- Ruby sử dụng
.key?
, Python sử dụngin
.
49. Truy cập giá trị mặc định trong Hash/Dict
Ruby:
hash = Hash.new("default")
puts hash[:key] # "default"
Python:
dict_data = {}
print(dict_data.get("key", "default")) # "default"
- Python sử dụng
.get(key, default)
, Ruby thiết lập giá trị mặc định khi khởi tạo.
50. Lambda đa dòng
Ruby:
my_lambda = ->(x) do x * 2
end puts my_lambda.call(3) # 6
Python:
def my_lambda(x): return x * 2 print(my_lambda(3)) # 6
- Python sử dụng hàm thông thường để thay thế lambda đa dòng.
51. Phương thức zip
Ruby:
arr1 = [1, 2, 3]
arr2 = ["a", "b", "c"]
zipped = arr1.zip(arr2)
puts zipped.inspect # [[1, "a"], [2, "b"], [3, "c"]]
Python:
arr1 = [1, 2, 3]
arr2 = ["a", "b", "c"]
zipped = zip(arr1, arr2)
print(list(zipped)) # [(1, "a"), (2, "b"), (3, "c")]
- Cả hai đều hỗ trợ phương thức
zip
, nhưng kết quả ở dạng mảng trong Ruby và iterator trong Python.
52. Thao tác với range
Ruby:
(1..5).each { |i| puts i } # 1 2 3 4 5
Python:
for i in range(1, 6): print(i) # 1 2 3 4 5
- Python cần sử dụng
range(start, stop)
.
53. Toán tử spaceship <=>
Ruby:
puts 5 <=> 10 # -1
puts 10 <=> 5 # 1
puts 5 <=> 5 # 0
Python:
def spaceship(a, b): return (a > b) - (a < b) print(spaceship(5, 10)) # -1
print(spaceship(10, 5)) # 1
print(spaceship(5, 5)) # 0
- Python không có toán tử
<=>
, nhưng có thể tự định nghĩa.
54. Tính tổng các phần tử trong mảng
Ruby:
arr = [1, 2, 3]
puts arr.sum # 6
Python:
arr = [1, 2, 3]
print(sum(arr)) # 6
- Python sử dụng hàm tích hợp
sum()
.
55. Xóa các giá trị nil/None
Ruby:
arr = [1, nil, 2, nil, 3]
puts arr.compact # [1, 2, 3]
Python:
arr = [1, None, 2, None, 3]
print([x for x in arr if x is not None]) # [1, 2, 3]
- Ruby có phương thức
.compact
, Python dùng list comprehension.
56. Biến toàn cục
Ruby:
$global_var = "I am global"
def show_global puts $global_var
end show_global # "I am global"
Python:
global_var = "I am global"
def show_global(): global global_var print(global_var) show_global() # "I am global"
- Ruby sử dụng ký hiệu
$
để khai báo biến toàn cục, Python sử dụng từ khóaglobal
bên trong hàm.
57. Xử lý lỗi với rescue
hoặc try-except
Ruby:
begin 1 / 0
rescue ZeroDivisionError puts "Cannot divide by zero"
end
Python:
try: 1 / 0
except ZeroDivisionError: print("Cannot divide by zero")
- Ruby sử dụng
rescue
, Python sử dụngtry-except
.
58. Tạo đối tượng Struct
Ruby:
Person = Struct.new(:name, :age)
person = Person.new("Alice", 30)
puts person.name # "Alice"
puts person.age # 30
Python:
from collections import namedtuple Person = namedtuple("Person", ["name", "age"])
person = Person(name="Alice", age=30)
print(person.name) # "Alice"
print(person.age) # 30
- Python sử dụng
namedtuple
từ thư việncollections
.
59. Định nghĩa module và import
Ruby:
module Greeting def self.say_hello "Hello!" end
end puts Greeting.say_hello # "Hello!"
Python:
# greeting.py
def say_hello(): return "Hello!" # main.py
import greeting
print(greeting.say_hello()) # "Hello!"
- Ruby sử dụng
module
, Python sử dụng tệp.py
và từ khóaimport
.
60. Kiểm tra kiểu dữ liệu
Ruby:
puts 123.is_a?(Integer) # true
puts "hello".is_a?(String) # true
Python:
print(isinstance(123, int)) # True
print(isinstance("hello", str)) # True
- Ruby sử dụng
.is_a?
, Python sử dụngisinstance()
.
61. Phương thức to_s
và str()
Ruby:
num = 123
puts num.to_s # "123"
Python:
num = 123
print(str(num)) # "123"
- Ruby sử dụng
.to_s
, Python sử dụngstr()
.
62. Lấy giá trị nhỏ nhất/lớn nhất trong mảng
Ruby:
arr = [3, 1, 4, 1, 5]
puts arr.min # 1
puts arr.max # 5
Python:
arr = [3, 1, 4, 1, 5]
print(min(arr)) # 1
print(max(arr)) # 5
- Python sử dụng hàm toàn cục
min()
vàmax()
, Ruby có phương thức.min
và.max
.
63. Xóa phần tử khỏi mảng
Ruby:
arr = [1, 2, 3, 4]
arr.delete(3)
puts arr # [1, 2, 4]
Python:
arr = [1, 2, 3, 4]
arr.remove(3)
print(arr) # [1, 2, 4]
- Ruby sử dụng
.delete
, Python sử dụng.remove
.
64. Tìm index của phần tử
Ruby:
arr = [1, 2, 3, 4]
puts arr.index(3) # 2
Python:
arr = [1, 2, 3, 4]
print(arr.index(3)) # 2
- Cả hai đều sử dụng
.index
.
65. Biểu thức điều kiện if-else
một dòng
Ruby:
puts "Even" if 4.even?
Python:
print("Even") if 4 % 2 == 0 else None
- Ruby sử dụng cú pháp
if
, Python sử dụngif-else
một dòng.
66. Sắp xếp mảng
Ruby:
arr = [3, 1, 4, 1, 5]
puts arr.sort # [1, 1, 3, 4, 5]
Python:
arr = [3, 1, 4, 1, 5]
print(sorted(arr)) # [1, 1, 3, 4, 5]
- Ruby sử dụng
.sort
, Python sử dụngsorted()
.
67. Sử dụng each
hoặc for
để lặp
Ruby:
arr = [1, 2, 3]
arr.each { |x| puts x }
Python:
arr = [1, 2, 3]
for x in arr: print(x)
- Ruby sử dụng
.each
, Python sử dụngfor
.
68. Tạo Hash/Dict từ hai danh sách
Ruby:
keys = [:a, :b, :c]
values = [1, 2, 3]
hash = Hash[keys.zip(values)]
puts hash # {:a=>1, :b=>2, :c=>3}
Python:
keys = ["a", "b", "c"]
values = [1, 2, 3]
dict_data = dict(zip(keys, values))
print(dict_data) # {'a': 1, 'b': 2, 'c': 3}
- Ruby sử dụng
Hash[keys.zip(values)]
, Python sử dụngdict(zip(keys, values))
.
69. Phương thức map
với block
Ruby:
arr = [1, 2, 3]
new_arr = arr.map { |x| x * 2 }
puts new_arr # [2, 4, 6]
Python:
arr = [1, 2, 3]
new_arr = list(map(lambda x: x * 2, arr))
print(new_arr) # [2, 4, 6]
- Ruby có block tích hợp trong
.map
, Python sử dụngmap()
với lambda.
70. Tạo mảng từ range
Ruby:
arr = (1..5).to_a
puts arr # [1, 2, 3, 4, 5]
Python:
arr = list(range(1, 6))
print(arr) # [1, 2, 3, 4, 5]
- Ruby sử dụng
.to_a
, Python sử dụnglist(range())
.
71. Thêm phần tử vào cuối mảng
Ruby:
arr = [1, 2, 3]
arr << 4
puts arr # [1, 2, 3, 4]
Python:
arr = [1, 2, 3]
arr.append(4)
print(arr) # [1, 2, 3, 4]
- Ruby sử dụng
<<
, Python sử dụng.append()
.
72. Xóa phần tử cuối mảng
Ruby:
arr = [1, 2, 3]
arr.pop
puts arr # [1, 2]
Python:
arr = [1, 2, 3]
arr.pop()
print(arr) # [1, 2]
- Cả hai đều sử dụng
.pop()
.
73. Thêm phần tử vào đầu mảng
Ruby:
arr = [2, 3, 4]
arr.unshift(1)
puts arr # [1, 2, 3, 4]
Python:
arr = [2, 3, 4]
arr.insert(0, 1)
print(arr) # [1, 2, 3, 4]
- Ruby sử dụng
.unshift
, Python sử dụng.insert()
với index0
.
74. Xóa phần tử đầu mảng
Ruby:
arr = [1, 2, 3]
arr.shift
puts arr # [2, 3]
Python:
arr = [1, 2, 3]
arr.pop(0)
print(arr) # [2, 3]
- Ruby sử dụng
.shift
, Python sử dụng.pop(0)
.
75. Kiểm tra giá trị có tồn tại trong mảng
Ruby:
arr = [1, 2, 3]
puts arr.include?(2) # true
Python:
arr = [1, 2, 3]
print(2 in arr) # True
- Ruby sử dụng
.include?
, Python sử dụng từ khóain
.
76. Phương thức inject
/reduce
Ruby:
arr = [1, 2, 3, 4]
sum = arr.inject(0) { |acc, x| acc + x }
puts sum # 10
Python:
from functools import reduce arr = [1, 2, 3, 4]
sum = reduce(lambda acc, x: acc + x, arr, 0)
print(sum) # 10
- Ruby sử dụng
.inject
, Python sử dụngreduce()
từ thư việnfunctools
.
77. Tách chuỗi thành mảng
Ruby:
str = "a,b,c"
arr = str.split(",")
puts arr # ["a", "b", "c"]
Python:
str = "a,b,c"
arr = str.split(",")
print(arr) # ["a", "b", "c"]
- Cả hai đều sử dụng
.split()
.
78. Nối mảng thành chuỗi
Ruby:
arr = ["a", "b", "c"]
str = arr.join("-")
puts str # "a-b-c"
Python:
arr = ["a", "b", "c"]
str = "-".join(arr)
print(str) # "a-b-c"
- Ruby sử dụng
.join
trên mảng, Python sử dụng.join
trên chuỗi.
79. Tạo hash/dict rỗng
Ruby:
hash = {}
puts hash # {}
Python:
dict_data = {}
print(dict_data) # {}
- Cả hai đều sử dụng
{}
.
80. Xóa key khỏi hash/dict
Ruby:
hash = { a: 1, b: 2, c: 3 }
hash.delete(:b)
puts hash # {:a=>1, :c=>3}
Python:
dict_data = { "a": 1, "b": 2, "c": 3 }
dict_data.pop("b")
print(dict_data) # {'a': 1, 'c': 3}
- Ruby sử dụng
.delete
, Python sử dụng.pop()
.
81. Lặp qua hash/dict
Ruby:
hash = { a: 1, b: 2, c: 3 }
hash.each { |key, value| puts "#{key}: #{value}" }
Python:
dict_data = { "a": 1, "b": 2, "c": 3 }
for key, value in dict_data.items(): print(f"{key}: {value}")
- Ruby sử dụng
.each
, Python sử dụng.items()
.
82. Xử lý giá trị mặc định khi key không tồn tại
Ruby:
hash = Hash.new("default")
puts hash[:key] # "default"
Python:
dict_data = {}
print(dict_data.get("key", "default")) # "default"
- Ruby sử dụng
Hash.new
, Python sử dụng.get()
với giá trị mặc định.
83. Khai báo lớp cơ bản
Ruby:
class Person def initialize(name) @name = name end def greet "Hello, #{@name}!" end
end person = Person.new("Alice")
puts person.greet # "Hello, Alice!"
Python:
class Person: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!" person = Person("Alice")
print(person.greet()) # "Hello, Alice!"
- Ruby sử dụng
class
, Python cũng sử dụngclass
, nhưng cú pháp khác nhau.
84. Phương thức select
Ruby:
arr = [1, 2, 3, 4, 5]
even = arr.select { |x| x.even? }
puts even # [2, 4]
Python:
arr = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, arr))
print(even) # [2, 4]
- Ruby sử dụng
.select
, Python sử dụngfilter()
.
85. Lọc giá trị trong hash/dict
Ruby:
hash = { a: 1, b: 2, c: 3 }
filtered = hash.select { |key, value| value > 1 }
puts filtered # {:b=>2, :c=>3}
Python:
dict_data = { "a": 1, "b": 2, "c": 3 }
filtered = {k: v for k, v in dict_data.items() if v > 1}
print(filtered) # {'b': 2, 'c': 3}
- Python sử dụng dictionary comprehension, Ruby sử dụng
.select
.