Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];

Вниз

Как перестать программировать на С++ в Паскаль стиле?   Найти похожие ветки 

 
@!!ex ©   (2009-05-11 18:43) [0]

После собеседования в одну фирму мне было сказано буквально следующее:
"Видно что у тебя большой опыт и понимание в этой сфере.
Но мы в затруднении, т.к. сейчас ты будешь программировать на С++ в паскаль стиле,
а для нас это не приемлемо. Поэтому вакансию мы не закрываем, если будет кто-то более опытный, то извини..."

Отсюда вопрос, как перестать писать в Паскаль стиле?


 
turbouser ©   (2009-05-11 18:46) [1]


> @!!ex ©   (11.05.09 18:43)  


> как перестать писать в Паскаль стиле?

Долго писать в стиле C++
Опыт одним словом..


 
TUser ©   (2009-05-11 18:47) [2]

Лучше сразу читай мануал :)

http://forum.codenet.ru/album.php?albumid=5&pictureid=16


 
DVM ©   (2009-05-11 18:49) [3]


> @!!ex ©   (11.05.09 18:43)  

а конкретно глядя на что это было сказано?


 
@!!ex ©   (2009-05-11 19:09) [4]

> [1] turbouser ©   (11.05.09 18:46)

Опыт же не изменится моего стиля программирования.


> [3] DVM ©   (11.05.09 18:49)

Смотрели проекты + смотрели немного кода + собеседование.


 
@!!ex ©   (2009-05-11 19:11) [5]

> [2] TUser ©   (11.05.09 18:47)

Пока не актуально. Вот лет через 5 надо будет задуматься.


 
Юрий Зотов ©   (2009-05-11 19:17) [6]

А зачем переставать писать в Паскаль стиле?

Всякие там синтаксические вкусности типа i++ и тернальных операторов - к этому привыкаешь очень быстро и вовсю используешь. А прочее - чем плох Паскалевский стиль? Да и чем он так уж отличается от сишного, ежели разобраться?

Есть всего два стиля программирования - плохой и хороший.


 
Pavia ©   (2009-05-11 23:52) [7]

Совет один писать на Си и забыть про паскаль.
Стили отличаются но это не принципиально. Так как он меняется очень быстро. Другое дело что если человек не програмировал на Си или мало. То на освоение понадобиться время и компания скорее всего просто перестраховалась.


 
Германн ©   (2009-05-12 02:07) [8]


> Pavia ©   (11.05.09 23:52) [7]
>
> Совет один писать на Си и забыть про паскаль.
> Стили отличаются но это не принципиально. Так как он меняется
> очень быстро

Да нет никаких "стилей"! Ну как вы не можете это понять?

Ну кроме указанных в Юрий Зотов ©   (11.05.09 19:17) [6]!

P.S. Вспомните сам сабж.


 
Eraser ©   (2009-05-12 02:33) [9]

с появлением в Делфи Exit(Value) стиль стал еще ближе к сишному, вот тернального оператора не хватает только - это да.


 
Игорь Шевченко ©   (2009-05-12 02:55) [10]


> Да нет никаких "стилей"! Ну как вы не можете это понять?


Стили есть, не надо рассказывать сказки. Поверь старому битому сишнику


 
test ©   (2009-05-12 04:41) [11]

Eraser ©   (12.05.09 02:33) [9]

D7
x:= ifthen(a>b,a,c);

Есть только он в виде процедуры, чтобы сэкономить они под каждый тип свою процедуру написали код один и тот же.


 
res novae   (2009-05-12 08:26) [12]

1. Восхваляй Страуструпа каждое утро божие;
2. Прочти Annotated Reference Manual, что за авторством пророка нашего;
3. Прочти Design Patterns: Elements of Reusable Object-Oriented Software, дабы познать вкус ООП истинного;
4. Напиши что-нибудь нетривиальное с применением полученных знаний, например tcp/ip сервер с пулом соединений и очередью приоритетов;
5. Проклинай паскаль вечером каждого дня;
6. И воздастся тебе.


 
Alex Konshin ©   (2009-05-12 09:21) [13]

[11] тернарный оператор и эти функции - это очень разные вещи и разница вовсе не в сокращении записи.

+= и ++ вроде есть в FreePascal.


 
Григорьев Антон ©   (2009-05-12 10:01) [14]

Даже интересно, что они имели ввиду под сишным стилем. Это написание конструкций типа
while (*d++=*s++);
что ли?

Так это выжигать надо калёным железом.


 
oxffff ©   (2009-05-12 10:19) [15]


> Eraser ©   (12.05.09 02:33) [9]
> с появлением в Делфи Exit(Value) стиль стал еще ближе к
> сишному, вот тернального оператора не хватает только - это
> да.


?

function TForm1.Ifthen<T>(LogicalExpression:boolean; const onTrue, onFalse: T): T;
begin
if LogicalExpression then exit(onTrue) else exit(onFalse);
end;

procedure TForm1.FormCreate(Sender: TObject);
var a:integer;
begin
a:=Ifthen<integer>(1>5,0,1);
end;


 
KSergey ©   (2009-05-12 10:31) [16]

жыль, что не приведены конкретные примеры
Но я подозреваю, например:

try/finally (т.е. подстоение си-кода в таком стиле, без объектов-оберток)
неиспользование шаблонов (или слабое использование)


 
oxffff ©   (2009-05-12 10:54) [17]


> вот тернального оператора не хватает только - это
> > да


Все хватает.

Tbc<A,B>=class
Type
TKeyPair=record
KEY:A;
Value:B;
end;
function GetPairFunc(aa:A;bb:B):TKeyPair;
public
class function CaseProc(Expression:A;const Keys:array of TKeyPair):B;
property GetPair[aa:A;bb:B]:TKeyPair read GetPairFunc;default;
end;
procedure TForm1.FormCreate(Sender: TObject);
var a:integer;
   PObj:Tbc<integer,integer>;
begin
a:=Tbc<integer,integer>.CaseProc(10,[PObj[1,2],PObj[3,4],PObj[5,6],PObj[10,8]]);
showmessage(inttostr(a));
end;

{ Tbc<A, B> }

class function Tbc<A, B>.CaseProc(Expression: A; const Keys: array of TKeyPair):B;
var keyPair:TKeyPair;
   Comparer:IComparer<A>;
begin
Comparer:=TComparer<A>.Default;
for keyPair in Keys do
    if Comparer.Compare(keyPair.KEY,Expression)=0 then
       begin
       exit(keyPair.value);
       end;
//Extend to Else
end;

function Tbc<A, B>.GetPairFunc(aa: A; bb: B): TKeyPair;
begin
result.KEY:=aa;
result.Value:=bb;
end;


 
KSergey ©   (2009-05-12 11:07) [18]

> oxffff ©   (12.05.09 10:54) [17]
> Все хватает.

Читабельность - капец. перегруженная функция iif - ничем не хуже, но кроче.

Потом, у тернарного оператора есть важная особенность, не реализуемая заменителями в виде функций: вычисляется только подходящая по условия часть.


 
Alkid ©   (2009-05-12 11:10) [19]

Вообще, что бы "поставить" стиль, очень хорошо много читать исходники, написанные в нужном стиле. Но ещё лучше - устроиться работать в коллектив с сильными С++-программистами и просить, чтобы тебе там делали безжалостный code-reivew.


 
Alex Konshin ©   (2009-05-12 11:16) [20]


> KSergey ©   (12.05.09 11:07) [18]
> > oxffff ©   (12.05.09 10:54) [17] > Все хватает. Читабельность
> - капец. перегруженная функция iif - ничем не хуже, но кроче.
> Потом, у тернарного оператора есть важная особенность, не
> реализуемая заменителями в виде функций: вычисляется только
> подходящая по условия часть.

Именно. И это очень важное отличие, о котором многие забывают (или не знают).


 
oxffff ©   (2009-05-12 11:44) [21]


> KSergey ©   (12.05.09 11:07) [18]
> > oxffff ©   (12.05.09 10:54) [17]
> > Все хватает.
>
> Читабельность - капец. перегруженная функция iif - ничем
> не хуже, но кроче.


В [17] это case, if в [15].


> не реализуемая заменителями в виде функций: вычисляется
> только подходящая по условию часть.


В чем сложность?. Пример в студию


 
Alex Konshin ©   (2009-05-12 11:48) [22]

item = array==null ? null : array[0];


 
Юрий Зотов ©   (2009-05-12 12:01) [23]

Предвкушаю...


 
oxffff ©   (2009-05-12 12:14) [24]


> Alex Konshin ©   (12.05.09 11:48) [22]
>KSergey ©   (12.05.09 11:07) [18]


А так не пробовали?

function TForm1.Ifthen<T>(Expression:boolean;const onTrue, onFalse: TFunc<T>):T;
var a:integer;
   b:TFunc<boolean>;
begin
if Expression then exit(onTrue) else exit(onFalse);
end;

procedure TForm1.FormCreate(Sender: TObject);
var SomeArray:pinteger;
   Value:integer;
begin
SomeArray:=nil;
Value:=Ifthen<integer>(SomeArray=nil, function : integer
                                begin
                                exit(0);
                                end
                              ,
{$POINTERMATH ON}
                                function : integer
                                begin
                                exit(SomeArray[0]);
                                end
{$POINTERMATH OFF}
                    );
showmessage(inttostr(value));
end;

А в С++ нет замыканий.
И нет того чтобы ввели С# 4.0 под словом dynamic.
А в delphi есть.


 
oxffff ©   (2009-05-12 12:14) [25]


> Юрий Зотов ©   (12.05.09 12:01) [23]


Приветствую Вас.


 
KSergey ©   (2009-05-12 12:29) [26]

> oxffff ©   (12.05.09 12:14) [24]
> А так не пробовали?

теперь сравнить с кодом из  [22] и плакать.

По смыслу: отсутствие тех или иных возможностей языка не влияет на качество итоговых программ. Совершенно. Хотя, конечно, длиной меряться помогает.

Но человека, привыкшего писать в идеологии одного языка - сразу видно, когда он пишет на другом свои первые опыты. Вполть до маразмов (но об этом не будем).


 
oxffff ©   (2009-05-12 12:37) [27]


> KSergey ©   (12.05.09 12:29) [26]
> > oxffff ©   (12.05.09 12:14) [24]
> > А так не пробовали?
>
> теперь сравнить с кодом из  [22] и плакать.


От чего плакать?
Я во всяком случае не заявляю о том, что это невозможно (ваш пост [18]).
Речь шла, что такого оператора нет. Я показал как сделать его самому.
То есть поступив конструктивно. Другой вопрос большей его записи.
Однако с введением "вывода типа"  от записи  
  function : integer
      begin
можно отказаться. Сократив технически до синтаксиса

Value:=Ifthen<integer>(SomeArray=nil, exit(0) ,
{$POINTERMATH ON}
                               exit(SomeArray[0]);
{$POINTERMATH OFF}
                   );


 
oxffff ©   (2009-05-12 12:41) [28]


> Однако с введением "вывода типа"  от записи


Точнее это даже здесь не нужно. Можно просто сократить запись для анонимных методов без параметров.


 
Alkid ©   (2009-05-12 13:18) [29]

Что-то как-то от темы ушли :)
Кстати, этот топик - хорошая иллюстрация всей относительности высказывания, мол, настоящему программисту надо всего несколько дней, что бы освоить новый язык программирования :)


 
KSergey ©   (2009-05-12 13:24) [30]

> oxffff ©   (12.05.09 12:37) [27]
> можно отказаться. Сократив технически до синтаксиса

А можно я сокращу до простого и понятного if then else? Спасибо.


 
oxffff ©   (2009-05-12 13:28) [31]


> KSergey ©   (12.05.09 13:24) [30]
> > oxffff ©   (12.05.09 12:37) [27]
> > можно отказаться. Сократив технически до синтаксиса
>
> А можно я сокращу до простого и понятного if then else?
> Спасибо.


В том то и дело, мне лично не нравится вообще ? оператор.
Уж больно не читаемо - а если выражение сильно вложено ? в ?. То человеку нужно будет раскрутить левоассоциативные операторы от правоассоциативных. Поэтому ? оператор - это зло. IMHO.


 
Anatoly Podgoretsky ©   (2009-05-12 13:30) [32]

> oxffff  (12.05.2009 13:28:31)  [31]

Не оператор ? зло, а Си :-)


 
KSergey ©   (2009-05-12 13:31) [33]

> oxffff ©   (12.05.09 13:28) [31]
> Поэтому ? оператор - это зло.

лопатой убить не сложно, если че.
Про топор я и вовсе молчу.


 
Alkid ©   (2009-05-12 14:04) [34]


> oxffff ©   (12.05.09 13:28) [31]
> В том то и дело, мне лично не нравится вообще ? оператор.
>
> Уж больно не читаемо - а если выражение сильно вложено ?
>  в ?. То человеку нужно будет раскрутить левоассоциативные
> операторы от правоассоциативных. Поэтому ? оператор - это
> зло. IMHO.

Не согласен. Его синтаксис - не фонтан, и слишком много вложенных операторов ?:  - это зло. Но условный оператор-выражение - это очень хорошая вещь, помогает писать в функциональном стиле там, где это возможно.


 
oxffff ©   (2009-05-12 14:38) [35]


> Alkid ©   (12.05.09 14:04) [34]
>
> > oxffff ©   (12.05.09 13:28) [31]
> > В том то и дело, мне лично не нравится вообще ? оператор.
>
> >
> > Уж больно не читаемо - а если выражение сильно вложено
> ?
> >  в ?. То человеку нужно будет раскрутить левоассоциативные
>
> > операторы от правоассоциативных. Поэтому ? оператор -
> это
> > зло. IMHO.
>
> Не согласен.


:). Приветствую тебя.
Я же добавил IMHO.


 
Игорь Шевченко ©   (2009-05-12 14:39) [36]


> Поэтому ? оператор - это зло.


одна ласточка погоды не делает.
Да и то, смешно, право - программисты на паскале обсуждают синтаксис С, пусть даже с плюсами.

Вы б лучше APL или Lisp обсуждали - тоже смешно получится


 
Alkid ©   (2009-05-12 14:54) [37]


> oxffff ©   (12.05.09 14:38) [35]
> :). Приветствую тебя.
> Я же добавил IMHO.

Привет :)
Ну ты своим имхом поделился, а я - своим :)


 
Alkid ©   (2009-05-12 14:56) [38]


> Игорь Шевченко ©   (12.05.09 14:39) [36]
> одна ласточка погоды не делает.
> Да и то, смешно, право - программисты на паскале обсуждают
> синтаксис С, пусть даже с плюсами.
>
> Вы б лучше APL или Lisp обсуждали - тоже смешно получится

ИМХО, если программист хороший, то "программист" и "на дельфи" у него идут раздельно. "Программист" - это про фундаментальные знания, а "на дельфи" - это к конкретике, которая должна идти рядом с "на С", "на Lisp", "на ...". В такой постановке вопроса ничего смешонго не получается )


 
Юрий Зотов ©   (2009-05-12 15:01) [39]

> Alkid ©   (12.05.09 14:56) [38]

Так на какое же "на ..." она должна идти? Можно с  этого места чуть подробнее?
:o)


 
Игорь Шевченко ©   (2009-05-12 15:03) [40]

Alkid ©   (12.05.09 14:56) [38]

Вот о степени "хорошести" программиста как раз и можно судить по высказываниям типа "foo есть безусловное зло и чем скорее сдохнут те, кто его использует, тем скорее мир станет светлее и чище".


> ИМХО, если программист хороший, то "программист" и "на дельфи"
> у него идут раздельно


Не факт. Прежде чем погрузиться в особенности конструкций конкретного языка, а порой и в особенности парадигм, навязываемых этим языком, хороший программиста на одном языке будет посредственным программистом на другом. Собственно и заглавный пост в ветке - об этом.

А просто "хороший" программист, безотносительно языка, это, извини, сильно смахивает на сферического коня.



Страницы: 1 2 3 4 5 вся ветка

Форум: "Прочее";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.006 c
2-1243007821
madmech
2009-05-22 19:57
2009.07.19
Проблема с изменением ориентации страницы в отчете


15-1242505804
Юрий
2009-05-17 00:30
2009.07.19
С днем рождения ! 17 мая 2009 воскресенье


2-1243323681
b/@.
2009-05-26 11:41
2009.07.19
Можно ли импортировать ActiveX по другому ?


15-1242463718
oxffff
2009-05-16 12:48
2009.07.19
Помогите скачать


15-1242388304
Palladin
2009-05-15 15:51
2009.07.19
Враппер к WinHTTP.dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский