雑誌「Code」(YandexPracticum)の記事の分析

説明部分



私は最近、CodeマガジンでComparison:Classes vs.Functionsという記事に出くわしました私はそれを読みました、そしてそれは私には...奇妙に見えました。この雑誌は、初心者プログラマー向けの出版物としての地位を確立しています。しかし、視聴者レベルを割り引いても、この記事は多くの疑問を投げかけます。



この出版物は、Codeマガジンの編集スタッフに連絡する試みです。私は決して嫌いな投稿を書いているわけではありません。それどころか、私の目標は記事を解析して欠点を指摘することです。著者も編集委員会も怒らせたくない。現在の記事では何も変わらないことは認めますが、編集者が何かに注意するかもしれません。



本文全体を通して、初心者の目を通して記事検討していることを強調しておきます。私はこれについてささやかな経験を持っています。プログラミングのレッスンを行い、チュートリアルを書き、メンタリングを行いました。したがって、私は1つの基準、つまり初心者プログラマーが情報どのよう学習するかという欠点を見つけますこれは出版物の主題と一致しているように私には思えます。



編集部はコメントに私の考えを書くように私にアドバイスしました。しかし、テキストが大きすぎて収まりませんでした。そして第二に、コメントが無視されているような気がしますが、これについては別途お話します。



コンテキストの完全性については、オリジナルを読んでください。長くはかからないはずです。



記事の何が問題になっていますか



したがって、この記事の目的は、手続き型とOOPという2つのパラダイムを比較することです。初心者にとってはかなり良いトピックです。何が悪かったのか?



2つの言語



最初の間違いは、作者がPythonとJavaScriptの2つの言語を使用していることです。これのポイントは何ですか?それどころか、違いがはっきりとわかるように、比較は1つの言語のフレームワーク内で行われる必要があります。もう1つの言語は、コンテキストの切り替えと構文の違いです。これは、電話の2つのプログラムを比較するようなものですが、一方を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 :)




.



  1. , , ? , ?
  2. 編集委員会がコメントを無視するのはなぜですか?特にスタイルやネーミングの面で、皆さんが喜ばれるとは限らないことを理解しています。しかし、読者は明らかな間違いを指摘しています。コメントはすでに6か月前のものですが、記事では何も変更されていません。
  3. そして最後の1つ-誤解を招くため、記事の内容は読者に害を及ぼす可能性が高いように思われます。編集者はこれについてどう思いますか?



All Articles