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 :)
.
- , , ? , ?
- 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.
- 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?