Сообщение Re: Ширина кода - газетная vs книжная от 12.01.2025 14:53
Изменено 12.01.2025 15:03 swame
Re: Ширина кода - газетная vs книжная
Здравствуйте, Shmj, Вы писали:
S>Вот, по умолчанию в той же Idea — около 75 символов. По сути это газетная строка или близко к ней.
S>А ведь можно было сделать длинным? Ну хотя бы 150-200 символов. И читать код как книгу. Тем более мониторы то расширяются.
S>Не пробовали? Что лучше? Сколько символов ставите?
А вы код только пишете и читаете, или все-таки иногда отлаживаете и запускаете?
У меня стоит дефолт 100 символов. Но такая ширина используется в основном только для заголовков методов со строковыми параметрами и текстовыми строками.
Там где код, обычно длина не более 40-60 символов.
я отлаживаю код.
1. В длинные выражения в одну строку не поставить точку останова, не зайти отладчиком.
Ну или это если у кого вдруг это отладчик позволяет, то неудобно.
2. Промежуточные вычисления я часто сохраняю в локальные переменные, чтобы можно было посмотреть отладчиком .
Код в результате оказывается внезапно короче, потому что присвоенное в 1 месте переменная используется вместо повторяющихся в одном методе цепочек.
3. Короткий строки кода лучше мерджится гитом в случае, если правили одно место, и легче разрешаются конфликты.
4. В Коротких строках легче находить повторения и выносить в отдельные методы.
Вот пример кода который я недавно переформатировал
S>Вот, по умолчанию в той же Idea — около 75 символов. По сути это газетная строка или близко к ней.
S>А ведь можно было сделать длинным? Ну хотя бы 150-200 символов. И читать код как книгу. Тем более мониторы то расширяются.
S>Не пробовали? Что лучше? Сколько символов ставите?
А вы код только пишете и читаете, или все-таки иногда отлаживаете и запускаете?
У меня стоит дефолт 100 символов. Но такая ширина используется в основном только для заголовков методов со строковыми параметрами и текстовыми строками.
Там где код, обычно длина не более 40-60 символов.
я отлаживаю код.
1. В длинные выражения в одну строку не поставить точку останова, не зайти отладчиком.
Ну или это если у кого вдруг это отладчик позволяет, то неудобно.
2. Промежуточные вычисления я часто сохраняю в локальные переменные, чтобы можно было посмотреть отладчиком .
Код в результате оказывается внезапно короче, потому что присвоенное в 1 месте переменная используется вместо повторяющихся в одном методе цепочек.
3. Короткий строки кода лучше мерджится гитом в случае, если правили одно место, и легче разрешаются конфликты.
4. В Коротких строках легче находить повторения и выносить в отдельные методы.
Вот пример кода который я недавно переформатировал
| Было | |
| |
type
RRowContext = record
model: TKModel2State;
ModelState: TKModel2State;
Vertex: Integer;
Values: TStringArray;
aData: ARColumn;
Info: RKModelInfo;
AInput: TRestInput;
procedure Clear;
end;
function TRestKModelTerminals.GetValue(index: Integer; const RC: RRowContext;
const Island: RIsland; const terminalInfo: RTerminalInfo): string;
begin
case index of
0 {vertex}: Result := RC.Vertex.ToString;
1 {terminal}: Result := RC.modelState.Graph.TerminalByVertex(RC.Vertex).index.ToString;
2 {key}: Result := terminalInfo.key;
3 {island}: Result := terminalInfo.Island.ToString;
4 {isUnderVoltage}: Result := BoolToStr(island.UnderVoltage, RC.AInput.ContentType);
5 {state}: Result := '';
6 {checkPoint}: Result := '';
7 {updateTime}: Result := {TimeToStr} DateToISO8601(island.TmStUpdate);
8 {oppositeTerminals}: Result := 'Opposite terminals';
else
Assert (false);
end;
end;
procedure TRestKModelTerminals.Add(const RC: RRowContext);
var
island: RIsland;
rowIndex: Integer;
terminalInfo: RTerminalInfo;
c: Integer;
uri: TURI;
begin
island := RC.modelState.Islands.Islands[RC.modelState.IslandNumByVertex(RC.Vertex)];
terminalInfo := RC.modelState.Graph.GetTerminalInfo(RC.Vertex);
for c := 0 to length(RC.Values) - 1 do
RC.Values[c] := GetValue(c, RC, Island, terminalInfo);
rowIndex := RC.aData.AddRow(RC.Values);
c := RC.aData.FindColumn('oppositeTerminals');
if c >= 0 then begin
{oppositeTerminals}
uri := GetUrlHead(TableUseHttps);
uri.Path := joinStr(['documents', RC.AInput.DocUID.ToString, 'kmodel-terminals'],'/');
uri.AddParameter('oppositeFor', RC.Vertex.ToString);
RC.aData.Links [c, rowIndex] := TIdURI.URLEncode (URI.ToString);
end;
if RC.AInput.ContentType = ctForm then
addIcon(RC.aData, rowIndex, RC.Info, RC.modelState.Graph.TerminalByVertex(RC.Vertex));
end;
procedure TRestKModelTerminals.Get_OppositeFor (var RC: RRowContext; aFromT: integer);
var
edges: RSEdges;
i, v: Integer;
G: TKModelGraph;
begin
G := RC.model.Graph;
edges := G.SGraph.edgesFrom(aFromT);
for i := 0 to edges.Count - 1 do begin
v := edges[i].ToVertex;
if G.TerminalByVertex(v).id < 0 then continue;
RC.Vertex := v;
Add(RC);
end;
edges.Free;
end;
procedure TRestKModelTerminals.Get_ConnectorFor (var RC: RRowContext; aFromT: integer);
var
edges, nodeEdges: RSEdges;
i, j, nv, v: Integer;
G: TKModelGraph;
begin
G := RC.model.Graph;
edges := G.SGraph.edgesFrom(aFromT);
for i := 0 to edges.Count - 1 do begin
v := edges[i].ToVertex;
if G.TerminalByVertex(v).id >= 0 then continue;
nodeEdges := G.SGraph.edgesFrom(v);
for j := 0 to nodeEdges.Count - 1 do begin
nv := nodeEdges[j].ToVertex;
if nv = aFromT then continue;
RC.Vertex := nv;
Add(RC);
end;
nodeEdges.Free;
end;
edges.Free;
end;
procedure TRestKModelTerminals.Get_Vertex (var RC: RRowContext; aFromT: integer);
var
edges: RSEdges;
i, v: Integer;
begin
edges := RC.model.Graph.SGraph.edgesFrom(aFromT);
for i := 0 to edges.Count - 1 do begin
RC.Vertex := edges[i].ToVertex;
Add(RC);
end;
end;
procedure TRestKModelTerminals.Get_All (var RC: RRowContext; aIslandIndex: integer);
var
v: Integer;
terminal: RTerminal;
terminalInfo: RTerminalInfo;
island: RIsland;
params: RKModelParams;
G: TKModelGraph;
begin
G := RC.model.Graph;
PrepareParams (RC.AInput, params);
for v := 0 to G.SGraph.VerticesCount - 1 do begin
terminal := G.TerminalByVertex(v);
terminalInfo := G.GetTerminalInfo(v);
island := RC.model.Islands.Islands[RC.model.IslandNumByVertex(v)];
if terminal.id < 0 then continue;
if (aIslandIndex >= 0) and (terminalInfo.Island <> params.IslandIndex) then continue;
if island.TmStUpdate < params.StartTime then continue;
RC.Vertex := v;
Add(RC);
end;
end;
function TRestKModelTerminals.Get(AInput: TRestInput): ARColumn;
var
RC: RRowContext;
KModel: TKModel2;
fieldsId: TIntArray;
params: RKModelParams;
stat: TServiceStat;
begin
Result.Clear;
RC.Clear;
KModel := CurrentModel(AInput);
if KModel = nil then exit;
RC.model := KModel.LastModel;
if not Assigned(RC.model) then exit;
RC.info := KModelServerData.ModelInfoByModel(KModel);
RC.modelState := RC.Info.Model.LastModel;
try
stat := TServiceStat.Create('');
stat.Start;
RC.Adata.Clear;
RC.AInput := AInput;
fieldsId := Fields_.FindFields(AInput.fields);
if AInput.ContentType <> ctForm then
fieldsId.DeleteValue(8);
RC.values := Fields_.ColumnsText.PickByNumber(fieldsId);
RC.Adata.ColumnsText(RC.Values);
Fields_.AssignFieldsProps(RC.Adata);
PrepareParams (AInput, params);
if params.OppositeFor >= 0 then
Get_OppositeFor (RC, params.OppositeFor)
else if params.ConnectedFor >= 0 then
Get_ConnectorFor (RC, params.ConnectedFor)
else if params.Vertex >= 0 then
Get_Vertex (RC, params.Vertex)
else
Get_All (RC, params.IslandIndex);
finally
stat.Stop;
FStat.SummStat(stat);
Result := RC.Adata;
end;
end;| Стало | |
Re: Ширина кода - газетная vs книжная
Здравствуйте, Shmj, Вы писали:
S>Вот, по умолчанию в той же Idea — около 75 символов. По сути это газетная строка или близко к ней.
S>А ведь можно было сделать длинным? Ну хотя бы 150-200 символов. И читать код как книгу. Тем более мониторы то расширяются.
S>Не пробовали? Что лучше? Сколько символов ставите?
А вы код только пишете и читаете, или все-таки иногда отлаживаете и запускаете?
У меня стоит дефолт 100 символов. Но такая ширина используется в основном только для заголовков методов со строковыми параметрами и текстовыми строками.
Там где код, обычно длина не более 40-60 символов.
я отлаживаю код.
1. В длинные выражения в одну строку не поставить точку останова, не зайти отладчиком.
Ну или это если у кого вдруг это отладчик позволяет, то неудобно.
2. Промежуточные вычисления я часто сохраняю в локальные переменные, чтобы можно было посмотреть отладчиком .
Код в результате оказывается внезапно короче, потому что присвоенное в 1 месте переменная используется вместо повторяющихся в одном методе цепочек.
3. Короткий строки кода лучше мерджится гитом в случае, если правили одно место, и легче разрешаются конфликты.
4. В Коротких строках легче находить повторения и выносить в отдельные методы.
Вот пример кода который я недавно переформатировал
S>Вот, по умолчанию в той же Idea — около 75 символов. По сути это газетная строка или близко к ней.
S>А ведь можно было сделать длинным? Ну хотя бы 150-200 символов. И читать код как книгу. Тем более мониторы то расширяются.
S>Не пробовали? Что лучше? Сколько символов ставите?
А вы код только пишете и читаете, или все-таки иногда отлаживаете и запускаете?
У меня стоит дефолт 100 символов. Но такая ширина используется в основном только для заголовков методов со строковыми параметрами и текстовыми строками.
Там где код, обычно длина не более 40-60 символов.
я отлаживаю код.
1. В длинные выражения в одну строку не поставить точку останова, не зайти отладчиком.
Ну или это если у кого вдруг это отладчик позволяет, то неудобно.
2. Промежуточные вычисления я часто сохраняю в локальные переменные, чтобы можно было посмотреть отладчиком .
Код в результате оказывается внезапно короче, потому что присвоенное в 1 месте переменная используется вместо повторяющихся в одном методе цепочек.
3. Короткий строки кода лучше мерджится гитом в случае, если правили одно место, и легче разрешаются конфликты.
4. В Коротких строках легче находить повторения и выносить в отдельные методы.
Вот пример кода который я недавно переформатировал
| Было | |
| |
| Стало | |
| |