_DEATH_-ի խոսքերից
Էն ժամանակ, որ էս թեման բացել եմ C++ գրեթե չգիտեի: Հիմա շատ լավ գիտեմ ու ևս մի քանի օրինակ կբերեմ համեմատելու համար: Դեյտելի օրինակ
Հմմ, Դեյտլնա այս շեդևռի հեղինակը? Ես քեզ խորհուրդ կտամ այդ գրքից հեռու մնաս: Համարժեք կոդը կարելիա գրել այսպես.
Կոդ:
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int n[10] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
cout<<"Element"<<setw(13)<<"Value"<<setw(17)<<"Histogram"<<endl;
for ( int i = 0; i < 10; cout<<setfill(' ')<<setw(7)<<i<<setw(13)<<n[i]<<setw(8)<<' '<<setfill('*')<<setw(n[i]+1)<<"\n", i++ );
}
Իսկ քո բերած Python-ի օրինակը լրիվ համարժեք չի:
Նախ և առաջ պետքա հասկանալ, որ Python-ը իր ֆունկցիոնալ հնարավորություններով ոչինչով չի գերազանցում C++-ին: Ու եթե ինչ որ բան պիտոնով կարելիա անել ավելի կարճ, դա ոչ թե լեզվի, այլ հարուստ գրադարանի շնորհքնա: Իսկ '{ }' և ';' սիմվոլները ընդհանրապես չեն խանգարում, այլ հակառակը, կոդի ստրուկտուրան ավելի ակնհայտ են դարձնում: C++-ը շատ ավելի հզոր, հարուստ և բազմակողմ լեզաույա, ինչի հետևանքով էլ սկզբնական շրջանում դժվարա յուրացնել ու հասկանալ: Ու ցուցիչների 'պրոբլեմը' ամենևին էլ պրոբլեմ չի հասկացող մարդու համար, այլ առավելություն: Ճիշտա, Python-ով առօրյա ծրագրերը ավելի արագ են գրվում, բայց փոխարենը կորցնում ենք կատարման արագության մեջ: Այս առումով պիտոնը C#-ին կոնկուրենտ չի: Python-ը հարմարա այն դեպքում, երբ պետքա արագ ինչ-որ խնդիր լուծել, առանց ծրագրավորման նրբությունների մեջ խորանալու, ու մեկել որպես սցենարներ գրելու լեզու, ասենք խաղերի համար:
_DEATH_-ի խոսքերից
Ես էն ժամանակ C++ ընթանրապես չգիտեի, հիմա մի քիչ գիտեմ ու նկատեցի որ բոլորդ ամենինչ ճիշտ հակառակն եք ներկայացրել, պաշտպանելու համար խղճուկ C++-ը:
Բարոյապես մաշված շատ ճիշտ բնութագիրա C++-ի համար, որովհետև կոդը շատ դեպքերում անըմբռնելի ա ու նույնիսկ քո գրած ծրագիրը կարողա մի երկու ամսից չհականաս, որին նպաստումա նաև goto հրամանը, որը Python-ում չկա:
Բացի դրանից C++-ի «քձիբության» պատճառով շատ դժվար է սովորել այն, իսկ Python-ի դեպքում ծրագրերի կոդերը բաց են, որի շնորհիվ ուրիշի կոդերը ուսումնասիրելով մարդիկ շատ արագ դառնում են մասնագետներ:
Հուսով եմ դու քո կարծիքը փոխել ես: C++-ը շարունակումա զարգանալ, այս տարի դուրսա գալու նոր ստանդարտը: Իսկ goto հրամանը ոչ ոք սթափ վիճակում չի օգտագործում: C++-ով գոյություն ունեն անթիվ անհամար բաց կոդով ծրագրեր ու գրադարաններ, բաց նայի ինչքան սիրտդ կուզի:
Էս քեզ օրինակ C++-ով, հետաքրքիրա պիտոնով սրա համարժեք կոդը ինչ տեսք կունենա?
Կոդ:
#include <iostream>
using namespace std;
template<class MyType> class node
{
public:
typedef void Function (MyType& val);
MyType data;
node* left;
node* right;
node(MyType val): left(NULL), right(NULL)
{
data = val;
}
void add(const MyType& val)
{
if(val<data)
{
if(left != NULL)
left->add(val);
else
left = new node(val);
}
else
{
if(right!=NULL)
right->add(val);
else
right = new node(val);
}
}
~node()
{
if(left!=NULL)
delete left;
if(right!=NULL)
delete right;
}
void for_each(Function funct)
{
if(left!=NULL)
left->for_each(funct);
funct(data);
if(right!=NULL)
right->for_each(funct);
}
};
void print(int& val)
{
cout<<val<<endl;
}
void main()
{
int n[10] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
node<int>* pRoot = new node<int>(12);//բինար սորտավորված ծառի արմատ
for (register int i = 0; i < 10; pRoot->add(n[i]), i++);
pRoot->for_each(print);//ծառի ամեն էլեմենտի համար ըստ աճման կարգի կանչում ենք print ֆունկցիան: print-ի փոխարեն կարա լինի ցանկացած ուրիշ ֆունկցիա
delete pRoot;
}
Էջանիշներ