Análisis de un artículo de la revista "Code" (Yandex Practicum)

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 :)




.



  1. , , ? , ?
  2. ¿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.
  3. 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?



All Articles