[chirp_devel] Is FLAKE8 line length 80 still appropriate?

Craig Jones
Wed May 17 17:16:27 PDT 2023


Dan & Stuart (& Martin, below),

>> he argued that if your code was getting constrained to the right-hand edge (in his words "more than 3 levels of indentation"), your functions were probably getting too complex 

OK, I get that. I follow the rule of refactoring down to 
"single-purpose" functions all the time. But, here's an example of a 
function that can't get any simpler: It's only doing one thing 
(repeatedly 9 times). It should only take (9 + overhead) lines of code, 
but with PEP8 it gets spread out to 50 lines.


definterpret_extra_channel_data(self, mem, _mem):
         mem.extra =RadioSettingGroup("Extra","extra")
         mem.extra.extend(
[
RadioSetting(
"rev","Reverse",RadioSettingValueBoolean(_mem.rev)
),
RadioSetting(
"compander",
"Compander",
RadioSettingValueBoolean(_mem.compander),
),
RadioSetting(
"talkaround",
"Talkaround",
RadioSettingValueBoolean(_mem.talkaround),
),
RadioSetting(
"pttid",
"PTT ID",
RadioSettingValueList(
self._PTT_IDS,self._PTT_IDS[_mem.pttid]
),
),
RadioSetting(
"bclo",
"Busy Channel Lockout",
RadioSettingValueList(self._BCLO,self._BCLO[_mem.bclo]),
),
RadioSetting(
"optsig",
"Optional Signaling",
RadioSettingValueList(
self._OPT_SIGS,self._OPT_SIGS[_mem.optsig]
),
),
RadioSetting(
"dtmfSlotNum",
"DTMF",
RadioSettingValueList(
self._DTMF_SLOTS,self._DTMF_SLOTS[_mem.dtmfSlotNum]
),
),
RadioSetting(
"twotone",
"2-Tone",
RadioSettingValueList(
self._TONE2_SLOTS,self._TONE2_SLOTS[_mem.twotone]
),
),
RadioSetting(
"fivetone",
"5-Tone",
RadioSettingValueList(
self._TONE5_SLOTS,self._TONE5_SLOTS[_mem.fivetone]
),
),
]
)

vs. this version with a 132 char line limit:

definterpret_extra_channel_data(self, mem, _mem):
         mem.extra =RadioSettingGroup("Extra","extra")
         mem.extra.extend(
[
RadioSetting("rev","Reverse",RadioSettingValueBoolean(_mem.rev)),
RadioSetting("compander","Compander",RadioSettingValueBoolean(_mem.compander)),
RadioSetting("talkaround","Talkaround",RadioSettingValueBoolean(_mem.talkaround)),
RadioSetting("pttid","PTT 
ID",RadioSettingValueList(self._PTT_IDS,self._PTT_IDS[_mem.pttid])),
RadioSetting("bclo","Busy Channel 
Lockout",RadioSettingValueList(self._BCLO,self._BCLO[_mem.bclo])),
RadioSetting("optsig","Optional 
Signaling",RadioSettingValueList(self._OPT_SIGS,self._OPT_SIGS[_mem.optsig])),
RadioSetting("dtmfSlotNum","DTMF",RadioSettingValueList(self._DTMF_SLOTS,self._DTMF_SLOTS[_mem.dtmfSlotNum])),
RadioSetting("twotone","2-Tone",RadioSettingValueList(self._TONE2_SLOTS,self._TONE2_SLOTS[_mem.twotone])),
RadioSetting("fivetone","5-Tone",RadioSettingValueList(self._TONE5_SLOTS,self._TONE5_SLOTS[_mem.fivetone])),
]
)

That cuts it down to 15 lines. This is much, much easier to read. It 
only takes a split second to understand that "it's just a block of 
settings." The 50-line version takes way longer to inspect before you 
can see that there's nothing special about any of the 9 settings.

Martin and Stuart,

 >> side-by-side viewing

I would also argue that even then, it's more important to preserve 
vertical real estate than horizontal. When all you can see within 50 
physical lines is 9 logical lines of code, you easily lose track of 
where you are in the grand scheme of things. Sticking to this one simple 
example, say that someone added six more RadioSetting calls to this 
function and moved the Compander setting to the bottom because it 
logically goes together with one of the new settings. With one line per 
call, you'd spot the difference immediately in a side-by-side. With 15 
calls spread across 80 lines, you wouldn't.

I'm just say'n, it's been 50 years since the world went from 
80-character teletypes to 132-character line printers and I, for one, 
never looked back.

Anyway, If you can't see your way to 132 much less 160, I'll take 
whatever I can get. Do I hear 100? Hell, I'd even take 90. I lost count 
of how many comments I've written in the last few days that had to be 
continued to the next line because of just one word.

(Dan, I saw your "not interested" declaration. Please know that I'm not 
in the habit of beating a dead horse, so this will be my last post on 
the subject, and I'll certainly respect your final decision. I'll get 
back to work now. Thanks for listening.)



-- 
This email has been checked for viruses by AVG antivirus software.
www.avg.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20230517/0021027c/attachment-0001.html 


More information about the chirp_devel mailing list