Analisis artikel dari majalah "Code" (Yandex Practicum)

Bagian penjelasan



Baru-baru ini saya menemukan sebuah artikel di majalah Code yang berjudul Perbandingan: Kelas vs. Fungsi . Saya membacanya dan menurut saya ... aneh. Majalah ini memposisikan dirinya sebagai publikasi untuk pemrogram pemula. Tetapi bahkan dengan diskon pada tingkat audiens, artikel tersebut menimbulkan banyak pertanyaan.



Publikasi ini merupakan upaya untuk menghubungi staf editorial majalah Code. Saya sama sekali tidak menulis posting kebencian. Sebaliknya, tujuan saya adalah membongkar artikel dan menunjukkan kekurangannya. Saya tidak ingin menyinggung penulis atau dewan editorial. Saya akui bahwa tidak ada yang akan berubah dalam artikel ini, tetapi mungkin editor akan memperhatikan sesuatu.



Izinkan saya menekankan bahwa di seluruh teks saya mempertimbangkan artikel melalui sudut pandang seorang pemula . Saya memiliki pengalaman sederhana dalam hal ini: Saya melakukan pelajaran pemrograman, menulis tutorial, dan melakukan mentoring. Oleh karena itu, saya menemukan kesalahan hanya dengan satu kriteria - bagaimana programmer pemula akan mempelajari informasi tersebut . Tampaknya bagi saya bahwa ini bertepatan dengan pokok bahasan publikasi.



Kantor redaksi menyarankan saya untuk menuliskan pemikiran saya di kolom komentar. Namun, teksnya terlalu besar untuk dimuat. Dan kedua, saya merasa bahwa komentar diabaikan, yang akan saya bicarakan secara terpisah.



Untuk kelengkapan konteks, baca aslinya, tidak perlu waktu lama.



Ada apa di artikel itu



Jadi, tujuan dari artikel ini adalah membandingkan dua paradigma: gaya prosedural dan OOP. Topik yang cukup bagus untuk pemula. Apa yang salah?



Dua bahasa



Kesalahan pertama adalah penulis menggunakan dua bahasa: Python dan JavaScript. Apa gunanya ini? Sebaliknya, perbandingan harus dilakukan dalam kerangka satu bahasa, agar perbedaannya terlihat jelas. Bahasa lain adalah pengalihan konteks dan perbedaan sintaksis. Ini seperti membandingkan dua program untuk telepon, tetapi menjalankan satu di iPhone dan yang lainnya di Android, mengabaikan fakta bahwa perbedaan platform bisa dramatis.



, β€” . β€” - , , . , , , . , , β€” , 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. Mengapa dewan editorial mengabaikan komentar? Saya mengerti bahwa Anda tidak akan menyenangkan semua orang, terutama dalam hal gaya dan penamaan. Tetapi para pembaca menunjukkan kesalahan yang jelas. Komentarnya sudah berumur enam bulan, tapi tidak ada yang berubah di artikel.
  3. Dan yang terakhir - menurut saya materi dari artikel tersebut lebih cenderung merugikan pembaca, karena menyesatkan. Apa pendapat editor tentang ini?



All Articles