الجزء التوضيحي
لقد عثرت مؤخرًا على مقال في مجلة Code بعنوان "المقارنة: الصفوف مقابل الوظائف" . قرأته وبدا لي ... غريبًا. تضع المجلة نفسها كمنشور للمبرمجين المبتدئين. ولكن حتى مع وجود خصم على مستوى الجمهور ، تثير المقالة العديد من الأسئلة.
هذا المنشور هو محاولة للاتصال بهيئة تحرير مجلة Code. أنا لا أكتب أي منشور يحض على الكراهية. على العكس من ذلك ، هدفي هو تحليل المقال وبيان أوجه القصور فيه. لا أريد أن أسيء إلى المؤلف أو هيئة التحرير. أعترف بأنه لن يتغير شيء في المقالة الحالية ، لكن ربما يلاحظ المحررون شيئًا ما.
اسمحوا لي أن أؤكد أنه في جميع أنحاء النص ، أفكر في المقال من خلال عيون مبتدئ . لدي خبرة متواضعة في هذا: لقد قمت بدروس البرمجة ، وكتبت دروسًا تعليمية ، وأقوم بالتوجيه. لذلك ، أجد خطأ في معيار واحد فقط - كيف سيتعلم المبرمج المبتدئ المعلومات . يبدو لي أن هذا يتزامن مع موضوع النشر.
نصحني مكتب التحرير بكتابة أفكاري في التعليقات. ومع ذلك ، ظهر النص أكبر من أن يتناسب. وثانيًا ، لدي شعور بأنه يتم تجاهل التعليقات ، والتي سأتحدث عنها بشكل منفصل.
من أجل اكتمال السياق ، اقرأ النص الأصلي ، لن يستغرق الأمر وقتًا طويلاً.
ما الخطأ في المقال
لذا ، فإن الغرض من المقالة هو مقارنة نموذجين: الأسلوب الإجرائي و OOP. موضوع جيد جدا للمبتدئين. ماذا حصل؟
لغتان
الخطأ الأول هو أن المؤلف يستخدم لغتين: Python و JavaScript. ماذا يكون النقطة من هذا؟ على العكس من ذلك ، يجب أن تتم المقارنة في إطار لغة واحدة ، حتى يمكن رؤية الاختلاف بوضوح. لغة أخرى هي تبديل السياق والاختلافات في بناء الجملة. يشبه الأمر مقارنة برنامجين بهاتف ، ولكن تشغيل أحدهما على iPhone والآخر على Android ، مع إغفال حقيقة أن الاختلاف في الأنظمة الأساسية يمكن أن يكون مذهلاً.
, — . — - , , . , , , . , , — , 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 :)
.
- , , ? , ?
- لماذا تتجاهل هيئة التحرير التعليقات؟ أفهم أنك لن ترضي الجميع ، خاصة من حيث الأسلوب والتسمية. لكن القراء يشيرون إلى أخطاء واضحة. التعليقات عمرها ستة أشهر بالفعل ، لكن لم يتغير شيء في المقالة.
- والأخير - يبدو لي أن مادة المقالة من المرجح أن تضر القارئ ، لأنها مضللة. ما رأي المحررين في هذا؟