d4rkme551ah-ի խոսքերից
Հմմ, Դեյտլնա այս շեդևռի հեղինակը? Ես քեզ խորհուրդ կտամ այդ գրքից հեռու մնաս: Համարժեք կոդը կարելիա գրել այսպես.
Կոդ:
#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++ );
}
Նախ էտ քո բերած համարժեք կոդը հիմա քննադատվում ա, նոր ստեղծվող բարձր մակարդակի ծրագրավորման լեզուների մեջ նենց էն անում, որ տենց գրել չլինի:
Ի դեպ դեյտելի հին հրատարակությունների մեջ տենց էր գրված: Ոնց հասկանում եմ ուզել ես մաքսիմալ փոքրացնել կոդի չափը, բայց էդ դեպքում cout-ը որ ֆայլին ա պատկանում iostream, թե iomanip՞՞՞, բա եթե 100 հատ գրադարան լինի՞՞ դրա համար ընդունելի չի քո գրած տարբերակը, պետք ա հստակ նշվի պատկանելիության տիրույթը ծրագրի մեջ ինչոր մի տեղ, որպեսզի հետագայում կարդալուց պարզ լինի, որը որտեղից ա: մնացած մասը վաբշե էս այլանդակել: int n[10] ՞՞՞ էս դեպքում բա որ ծրագիր գրես որի մեջ մի քանի հատ նույն չափի զանգված ա պետք, ոնց պտի անես, ասենք եթե պետք լինի 10-ը հետո 20 դարձնել, պտի հատ-հատ փոխես՞՞ Ավելի լավ ա էլ էտ կոդին չնայեմ վատանամ…
Իսկ քո բերած Python-ի օրինակը լրիվ համարժեք չի:
Նախ և առաջ պետքա հասկանալ, որ Python-ը իր ֆունկցիոնալ հնարավորություններով ոչինչով չի գերազանցում C++-ին: Ու եթե ինչ որ բան պիտոնով կարելիա անել ավելի կարճ, դա ոչ թե լեզվի, այլ հարուստ գրադարանի շնորհքնա: Իսկ '{ }' և ';' սիմվոլները ընդհանրապես չեն խանգարում, այլ հակառակը, կոդի ստրուկտուրան ավելի ակնհայտ են դարձնում: C++-ը շատ ավելի հզոր, հարուստ և բազմակողմ լեզաույա, ինչի հետևանքով էլ սկզբնական շրջանում դժվարա յուրացնել ու հասկանալ: Ու ցուցիչների 'պրոբլեմը' ամենևին էլ պրոբլեմ չի հասկացող մարդու համար, այլ առավելություն: Ճիշտա, Python-ով առօրյա ծրագրերը ավելի արագ են գրվում, բայց փոխարենը կորցնում ենք կատարման արագության մեջ: Այս առումով պիտոնը C#-ին կոնկուրենտ չի: Python-ը հարմարա այն դեպքում, երբ պետքա արագ ինչ-որ խնդիր լուծել, առանց ծրագրավորման նրբությունների մեջ խորանալու, ու մեկել որպես սցենարներ գրելու լեզու, ասենք խաղերի համար:
Էս գրածդ ժպիտ ա առաջացնում:
1) Հենց էտ ա ֆունկցիոնալ հնարավորությունների շնորհիվ, սինտաքսը լիքը ինստրուկցիաներ ունի, որոնք մի քանի անգամ կրճատում են կոդի չափը: Իսկ ներսարված (built in) հարուստ տիպերի շնորհիվ նոր դաս ստեղծել շատ հազվադեպ է պետք լինում:
2) Նախ ոչ թե հարուստ գրադարանների, այլ հարուստ մոդուլների, հետո էլ եթե ուշադիր լինես ես գրածս օրինակի մեջ ոչ մի ֆայլ չեմ ներմուծել: Չեմ ժխտում, որ շատ հարուստ բազա ունի, հաճախակի պետք եկող գրեթե ամենինչի համար մոդուլ ունի:
3)Լավ էլ խանգարում են, քո գրած կոդից ենթադրում եմ, որ դու էլ շատ լավ գիտես կոդի ստրուկտուրան ավելի ակնհայտ դարձնելու ամենճիշտ ձևը, որը Python լեզվի ոճն ա: Հեսա գրածդ դասի կոնստռուկտորը
Կոդ:
node(MyType val): left(NULL), right(NULL)
{
data = val;
}
եթե {-ն ակնհայտ ա դարձնում, ապա ինչու ես տենց գրել, հենա սենց գրեիր
Կոդ:
node(MyType val): left(NULL), right(NULL){data = val;}
Իսկ Python-ի ոճով առանձ էտ ձևավոր փակագծերի, բայց պետք ա տենց բլոկները հավասար տարածություններով ընդգծվի, շատ ավելի պարզ ա տենց կոդը:
Հուսով եմ դու քո կարծիքը փոխել ես: C++-ը շարունակումա զարգանալ, այս տարի դուրսա գալու նոր ստանդարտը: Իսկ goto հրամանը ոչ ոք սթափ վիճակում չի օգտագործում: C++-ով գոյություն ունեն անթիվ անհամար բաց կոդով ծրագրեր ու գրադարաններ, բաց նայի ինչքան սիրտդ կուզի:
Էս քեզ օրինակ C++-ով, հետաքրքիրա պիտոնով սրա համարժեք կոդը ինչ տեսք կունենա?
Ճիշտն ասած հիմա ինչ-ինչ պատճառներով C++ ավելի շատ եմ օգտագործում, կոմերցիոն ծրագիր եմ ուզում գրել…
Գրածդ օրինակը Python-ով կարելի ա ինչպես միշտ երկու տողով գրել առանձ ավելորդ դաս հայտարարելու, ուղակի քանի ամիս ա Python-ով չեմ գրել, մոռացել եմ էտ որ մեթոդն էր, իսկ եթե հարցը էտ դասը Python-ով թարգմանելն ա, ասա թարգմանեմ…
Ի դեպ Python-ի դեպքում ոչ մի շաբլոն մաբլոն, էտքան խուճուճ ու երկար կոդ պետք չի լինի էտ նույն դասը հայտարարելուց, բայց դե հիմա էտքան գրելու հավես չունեմ, շատ են լեզուները տարբերվում իրարից, համարժեք թարգմանելը մի քիչ բարդ ա:
Էջանիշներ