Parte explicativa
Recientemente me encontré con un artículo en la revista Code llamado Comparación: Clases vs. Funciones . Lo leí y me pareció ... extraño. La revista se posiciona como una publicación para programadores novatos. Pero incluso con un descuento a nivel de audiencia, el artículo plantea muchas preguntas.
Esta publicación es un intento de contactar al personal editorial de la revista Code. De ninguna manera estoy escribiendo una publicación de odio. Por el contrario, mi objetivo es analizar el artículo y señalar las deficiencias. No quiero ofender ni al autor ni al consejo editorial. Admito que nada cambiará en el artículo actual, pero tal vez los editores tomen nota de algo.
Permítanme enfatizar que a lo largo del texto estoy considerando el artículo con los ojos de un principiante . Tengo poca experiencia en esto: di lecciones de programación, escribí tutoriales y hago tutorías. Por lo tanto, encuentro fallas en un solo criterio: cómo el programador principiante aprenderá la información . Me parece que esto coincide con el tema de la publicación.
La oficina editorial me aconsejó que escribiera mis pensamientos en los comentarios. Sin embargo, el texto salió demasiado grande para caber. Y en segundo lugar, tengo la sensación de que se están ignorando los comentarios, de los que hablaré por separado.
Para completar el contexto, lea el original, no debería tomar mucho tiempo.
Que hay de malo en el articulo
Entonces, el propósito del artículo es comparar dos paradigmas: estilo procedimental y OOP. Es un buen tema para principiantes. ¿Qué salió mal?
Dos idiomas
El primer error es que el autor usa dos lenguajes: Python y JavaScript. ¿Cuál es el punto de esto? Por el contrario, la comparación debe tener lugar en el marco de un idioma, de modo que la diferencia se pueda ver claramente. Otro idioma es el cambio de contexto y las diferencias de sintaxis. Es como comparar dos programas para un teléfono, pero ejecutar uno en un iPhone y el otro en un Android, pasando por alto el hecho de que las diferencias de plataforma pueden ser dramáticas.
, — . — - , , . , , , . , , — , JavaScrip .
, JavaScript? , :
, JS . JS : private- ; — , . Python : . JavaScript, , . , .
. " ", , . , , .
— , . :
class User:
user_count = 0
def __init__(self, name, age, adress):
self.name = name
self.age = age
self.adress = adress
user.user_count += 1
user_count
. . , . user_count
: . ?
, . user_count
, . __init__
, self
. , , .
, , .
, , — . , , . , , :
user1 = User("ivan", 20, "addr1")
user2 = User("huan", 30, "addr2")
user3 = User("juan", 40, "addr3")
print(User.user_count)
# 3
, . , , del
. :
del user3
print(User.user_count)
# 3
:
def __del__(self):
User.user_count -= 1
del user3
print(User.user_count)
# 2
, . ? . ? . , .
, ? , — . len
. :
users = [user1, user2, user3]
print(len(users))
# 3
users.remove(user3)
print(len(users))
# 2
, : :
//
user1 = ['', 23, ''];
//
user2 = ['', 19, ''];
. — , ( JS):
var user1 = {
name: '',
age: 23,
adress: ''
};
var user2 = {
name: '',
age: 19,
adress: ''
};
, "" , . — , .
, . :
function user1_add_bonus(bonus_count) {
user1[3] += bonus_count;
user1[4] = Math.floor(user1[3]/10000);
if (user1[4] > 3) {
user1[4] = 3;
}
console.log(' ', user1[0], ' : ', user1[4])
}
function user2_add_bonus(bonus_count) {
user2[3] += bonus_count;
user2[4] = Math.floor(user2[3]/10000);
if (user2[4] > 3) {
user2[4] = 3;
}
console.log(' ', user2[0], ' : ', user2[4])
}
, . — . . , :
function user_add_bonus(user, bonus_count) {
user.bouns_count += bonus_count;
user.bonus_level = Math.floor(user.bouns_count / 10000);
if (user.bonus_level > 3) {
user.bonus_level = 3;
}
console.log(' ', user.name, ' : ', user.bonus_level)
}
, . user1_add_bonus
- , NaN
- . , 3 4:
[ "", 23, "", NaN, NaN ]
, , . , — ? , . -, . ", ?"
, , , — . , . — , , .
, user1_add_bonus
user2_add_bonus
. . , user1
user2
. :
— . , , 10.
, — . , , - . , , user
.
: :
function user1_add_bonus(bonus_count) {
user1[3] += bonus_count;
user1[4] = Math.floor(user1[3]/10000);
if (user1[4] > 3) {
user1[4] = 3;
}
console.log(' ', user1[0], ' : ', user1[4])
}
function user2_add_bonus(bonus_count) {
user2[3] += bonus_count;
user2[4] = Math.floor(user2[3]/10000);
if (user2[4] > 3) {
user2[4] = 3;
}
console.log(' ', user2[0], ' : ', user2[4])
}
function user3_add_bonus(bonus_count) {
user3[3] += bonus_count;
user3[4] = Math.floor(user3[3]/10000);
if (user3[4] > 3) {
user3[4] = 3;
}
console.log(' ', user3[0], ' : ', user3[4])
}
function user4_add_bonus(bonus_count) {
user4[3] += bonus_count;
user4[4] = Math.floor(user4[3]/10000);
if (user4[4] > 3) {
user4[4] = 3;
}
console.log(' ', user4[0], ' : ', user4[4])
}
function user5_add_bonus(bonus_count) {
user5[3] += bonus_count;
user5[4] = Math.floor(user5[3]/10000);
if (user5[4] > 3) {
user5[4] = 3;
}
console.log(' ', user5[0], ' : ', user5[4])
}
//
user1 = ['',23,'',0,0];
// 15000
user1_add_bonus(15000);
//
user2 = ['',19,'',3000,0];
// 5000
user2_add_bonus(5000);
//
user3 = ['',31,'',0,1]
//
user4 = ['',45,'',5000,2];
//
user5 = ['',32,'',8000,1];
// 10000
user5_add_bonus(10000);
:
, 20%, 5 . 5, . , — . : , . , . 100 , .
, . , , ? , , . , , , .
, , . . .
. :
class User1:
def __init__(self, name, age, adress):
self.name = name
self.age = age
self.adress = adress
class User2:
def __init__(self, name, age, adress):
self.name = name
self.age = age
self.adress = adress
# ...
user1 = User1(...)
user2 = User2(...)
user3 = User3(...)
user4 = User4(...)
user5 = User5(...)
# ...
! , ? , . , — .
, . , . — - : . — " " — .
, . , .
, — , , . . , , . , — ( — ), . — .
, . - : User
user
. Javascript .
: - , . , . .
: Javascript ,
__
(. ). : . , , .
, . Clean NPC :
— .
Emil Orekhov:
. , , , , ?
:
, . . user .
:
, , : user.user_count += 1
, user — User :)
.
- , , ? , ?
- ¿Por qué el consejo editorial ignora los comentarios? Entiendo que no agradará a todos, especialmente en términos de estilo y nombres. Pero los lectores señalan errores obvios. Los comentarios ya tienen seis meses, pero nada ha cambiado en el artículo.
- Y el último: me parece que el material del artículo tiene más probabilidades de dañar al lector, porque es engañoso. ¿Qué piensan los editores sobre esto?