Analyse d'un article du magazine "Code" (Yandex Practicum)

Partie explicative



Je suis récemment tombé sur un article dans le magazine Code intitulé "Comparison: Classes vs. Functions" . Je l'ai lu et cela m'a semblé ... étrange. Le magazine se positionne comme une publication pour les programmeurs novices. Mais même avec une remise au niveau d'audience, l'article soulève de nombreuses questions.



Cette publication est une tentative de contacter la rédaction du magazine Code. Je n'écris en aucun cas un message haineux. Au contraire, mon objectif est de démonter l'article et de signaler les lacunes. Je ne veux offenser ni l'auteur ni le comité de rédaction. J'avoue que rien ne changera dans l'article actuel, mais peut-être que les éditeurs prendront note de quelque chose.



Permettez-moi de souligner que tout au long du texte, je considère l'article à travers les yeux d'un débutant . J'ai peu d'expérience dans ce domaine: j'ai suivi des cours de programmation, écrit des tutoriels et fait du mentorat. Par conséquent, je trouve à redire à un seul critère - comment le programmeur débutant apprendra les informations . Il me semble que cela coïncide avec le sujet de la publication.



La rédaction m'a conseillé d'écrire mes réflexions dans les commentaires. Cependant, le texte était trop volumineux pour tenir. Et deuxièmement, j'ai le sentiment que les commentaires sont ignorés, ce dont je parlerai séparément.



Pour que le contexte soit complet, lisez l'original, cela ne devrait pas prendre longtemps.



Quel est le problème dans l'article



Ainsi, le but de l'article est de comparer deux paradigmes: le style procédural et la POO. Un très bon sujet pour les débutants. Qu'est ce qui ne s'est pas bien passé?



Deux langues



La première erreur est que l'auteur utilise deux langages: Python et JavaScript. À quoi ça sert? Au contraire, la comparaison doit avoir lieu dans le cadre d'une langue, afin que la différence soit clairement visible. Un autre langage est le changement de contexte et les différences de syntaxe. C'est comme comparer deux programmes pour un téléphone, mais en exécutant l'un sur un iPhone et l'autre sur un Android, en négligeant le fait que les différences de plate-forme peuvent être dramatiques.



, — . — - , , . , , , . , , — , 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. Pourquoi le comité de rédaction ignore-t-il les commentaires? Je comprends que vous ne plairez pas à tout le monde, notamment en termes de style et de dénomination. Mais les lecteurs signalent des erreurs évidentes. Les commentaires datent déjà de six mois, mais rien n'a changé dans l'article.
  3. Et le dernier - il me semble que le contenu de l'article est plus susceptible de nuire au lecteur, car il est trompeur. Que pensent les Ă©diteurs Ă  ce sujet?



All Articles