Մեջբերում _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;
}