也谈读<<代码整洁之道>>有感

通过阅读《代码整洁之道》,作者在前三章中深刻认识到,高质量代码的重要性不仅在于功能实现,更在于其命名、函数设计及重构的系统化。文中提出,一个函数应专注于完成单一任务,并保持内部代码的抽象一致性,以促进代码的清晰性和可维护性。此外,作者还分享了如何在使用他人框架时,明确理解问题解决的抽象层次,以及如何根据架构设计进行扩展。通过对本书内容的深入理解和实践,作者认为只有静心思考,方能有效提升代码质量,确保其在复杂系统的支撑下稳定运行。

 

    je上大力推从<<代码整洁之道>>之书,看来jes开始集中关注质量问题了,这迎合了最近打假成风的的社会风气!

   对于质量问题再怎么强调都不为过啊,性命攸关啊,只是社会浮华之风太重,我觉得只有静下心来,才能重视质量,提高质量!

    虽然只是读完了前三章,但是觉得豁然开朗,之前写代码诸如命名,函数,怎么重构都觉得不甚满意,虽然多次改进,零零碎碎有点感触,但是终究未能成系统,未能照顾方方面面,心中总是疙疙瘩瘩的!

    一个函数只做一件事情,这样才能命名,理解起来更好!

    要想只做一件事情,就要保证函数里面的代码处于同一个抽象等级!(这让我想到xml,或许函数也可以用xml能组织,这样它们的抽象等级就一目了然了,我一以来是多么的幻想能够看到代码的立体结构)

      当我们用别人的框架时候,并且应用解决我们所碰到的问题,我想最先心里应该明白的是:我们需要在哪个抽象层次的结构中获得问题的解;或者需要从哪个抽象层次扩展开来,以符合原本的架构设计!

   

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd"> <SchemaVersion>2.1</SchemaVersion> <Header>### uVision Project, (C) Keil Software</Header> <Targets> <Target> <TargetName>Target 1</TargetName> <ToolsetNumber>0x4</ToolsetNumber> <ToolsetName>ARM-ADS</ToolsetName> <pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed> <uAC6>0</uAC6> <TargetOption> <TargetCommonOption> <Device>STM32F103R6</Device> <Vendor>STMicroelectronics</Vendor> <PackID>Keil.STM32F1xx_DFP.2.2.0</PackID> <PackURL>http://www.keil.com/pack/</PackURL> <Cpu>IRAM(0x20000000,0x2800) IROM(0x08000000,0x8000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu> <FlashUtilSpec></FlashUtilSpec> <StartupFile></StartupFile> <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103R6$Flash\STM32F10x_128.FLM))</FlashDriverDll> <DeviceId>4233</DeviceId> <RegisterFile>$$Device:STM32F103R6$Device\Include\stm32f10x.h</RegisterFile> <MemoryEnv></MemoryEnv> <Cmp></Cmp> <Asm></Asm> <Linker></Linker> <OHString></OHString> <InfinionOptionDll></InfinionOptionDll> <SLE66CMisc></SLE66CMisc> <SLE66AMisc></SLE66AMisc> <SLE66LinkerMisc></SLE66LinkerMisc> <SFDFile>$$Device:STM32F103R6$SVD\STM32F103xx.svd</SFDFile> <bCustSvd>0</bCustSvd> <UseEnv>0</UseEnv> <BinPath></BinPath> <IncludePath></IncludePath> <LibPath></LibPath> <RegisterFilePath></RegisterFilePath> <DBRegisterFilePath></DBRegisterFilePath> <TargetStatus> <Error>0</Error> <ExitCodeStop>0</ExitCodeStop> <ButtonStop>0</ButtonStop> <NotGenerated>0</NotGenerated> <InvalidFlash>1</InvalidFlash> </TargetStatus> <OutputDirectory>.\Obj\</OutputDirectory> <OutputName>Template</OutputName> <CreateExecutable>1</CreateExecutable> <CreateLib>0</CreateLib> <CreateHexFile>1</CreateHexFile> <DebugInformation>1</DebugInformation> <BrowseInformation>1</BrowseInformation> <ListingPath>.\Obj\</ListingPath> <HexFormatSelection>1</HexFormatSelection> <Merge32K>0</Merge32K> <CreateBatchFile>0</CreateBatchFile> <BeforeCompile> <RunUserProg1>0</RunUserProg1> <RunUserProg2>0</RunUserProg2> <UserProg1Name></UserProg1Name> <UserProg2Name></UserProg2Name> <UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode> <nStopU1X>0</nStopU1X> <nStopU2X>0</nStopU2X> </BeforeCompile> <BeforeMake> <RunUserProg1>0</RunUserProg1> <RunUserProg2>0</RunUserProg2> <UserProg1Name></UserProg1Name> <UserProg2Name></UserProg2Name> <UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode> <nStopB1X>0</nStopB1X> <nStopB2X>0</nStopB2X> </BeforeMake> <AfterMake> <RunUserProg1>0</RunUserProg1> <RunUserProg2>0</RunUserProg2> <UserProg1Name></UserProg1Name> <UserProg2Name></UserProg2Name> <UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode> <nStopA1X>0</nStopA1X> <nStopA2X>0</nStopA2X> </AfterMake> <SelectedForBatchBuild>0</SelectedForBatchBuild> <SVCSIdString></SVCSIdString> </TargetCommonOption> <CommonProperty> <UseCPPCompiler>0</UseCPPCompiler> <RVCTCodeConst>0</RVCTCodeConst> <RVCTZI>0</RVCTZI> <RVCTOtherData>0</RVCTOtherData> <ModuleSelection>0</ModuleSelection> <IncludeInBuild>1</IncludeInBuild> <AlwaysBuild>0</AlwaysBuild> <GenerateAssemblyFile>0</GenerateAssemblyFile> <AssembleAssemblyFile>0</AssembleAssemblyFile> <PublicsOnly>0</PublicsOnly> <StopOnExitCode>3</StopOnExitCode> <CustomArgument></CustomArgument> <IncludeLibraryModules></IncludeLibraryModules> <ComprImg>1</ComprImg> </CommonProperty> <DllOption> <SimDllName>SARMCM3.DLL</SimDllName> <SimDllArguments></SimDllArguments> <SimDlgDll>DARMSTM.DLL</SimDlgDll> <SimDlgDllArguments>-pSTM32F103R6</SimDlgDllArguments> <TargetDllName>SARMCM3.DLL</TargetDllName> <TargetDllArguments></TargetDllArguments> <TargetDlgDll>TARMSTM.DLL</TargetDlgDll> <TargetDlgDllArguments>-pSTM32F103R6</TargetDlgDllArguments> </DllOption> <DebugOption> <OPTHX> <HexSelection>1</HexSelection> <HexRangeLowAddress>0</HexRangeLowAddress> <HexRangeHighAddress>0</HexRangeHighAddress> <HexOffset>0</HexOffset> <Oh166RecLen>16</Oh166RecLen> </OPTHX> </DebugOption> <Utilities> <Flash1> <UseTargetDll>1</UseTargetDll> <UseExternalTool>0</UseExternalTool> <RunIndependent>0</RunIndependent> <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging> <Capability>1</Capability> <DriverSelection>-1</DriverSelection> </Flash1> <bUseTDR>1</bUseTDR> <Flash2>BIN\UL2CM3.DLL</Flash2> <Flash3></Flash3> <Flash4></Flash4> <pFcarmOut></pFcarmOut> <pFcarmGrp></pFcarmGrp> <pFcArmRoot></pFcArmRoot> <FcArmLst>0</FcArmLst> </Utilities> <TargetArmAds> <ArmAdsMisc> <GenerateListings>0</GenerateListings> <asHll>1</asHll> <asAsm>1</asAsm> <asMacX>1</asMacX> <asSyms>1</asSyms> <asFals>1</asFals> <asDbgD>1</asDbgD> <asForm>1</asForm> <ldLst>0</ldLst> <ldmm>1</ldmm> <ldXref>1</ldXref> <BigEnd>0</BigEnd> <AdsALst>1</AdsALst> <AdsACrf>1</AdsACrf> <AdsANop>0</AdsANop> <AdsANot>0</AdsANot> <AdsLLst>1</AdsLLst> <AdsLmap>1</AdsLmap> <AdsLcgr>1</AdsLcgr> <AdsLsym>1</AdsLsym> <AdsLszi>1</AdsLszi> <AdsLtoi>1</AdsLtoi> <AdsLsun>1</AdsLsun> <AdsLven>1</AdsLven> <AdsLsxf>1</AdsLsxf> <RvctClst>0</RvctClst> <GenPPlst>0</GenPPlst> <AdsCpuType>"Cortex-M3"</AdsCpuType> <RvctDeviceName></RvctDeviceName> <mOS>0</mOS> <uocRom>0</uocRom> <uocRam>0</uocRam> <hadIROM>1</hadIROM> <hadIRAM>1</hadIRAM> <hadXRAM>0</hadXRAM> <uocXRam>0</uocXRam> <RvdsVP>0</RvdsVP> <hadIRAM2>0</hadIRAM2> <hadIROM2>0</hadIROM2> <StupSel>8</StupSel> <useUlib>1</useUlib> <EndSel>0</EndSel> <uLtcg>0</uLtcg> <nSecure>0</nSecure> <RoSelD>3</RoSelD> <RwSelD>3</RwSelD> <CodeSel>0</CodeSel> <OptFeed>0</OptFeed> <NoZi1>0</NoZi1> <NoZi2>0</NoZi2> <NoZi3>0</NoZi3> <NoZi4>0</NoZi4> <NoZi5>0</NoZi5> <Ro1Chk>0</Ro1Chk> <Ro2Chk>0</Ro2Chk> <Ro3Chk>0</Ro3Chk> <Ir1Chk>1</Ir1Chk> <Ir2Chk>0</Ir2Chk> <Ra1Chk>0</Ra1Chk> <Ra2Chk>0</Ra2Chk> <Ra3Chk>0</Ra3Chk> <Im1Chk>1</Im1Chk> <Im2Chk>0</Im2Chk> <OnChipMemories> <Ocm1> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm1> <Ocm2> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm2> <Ocm3> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm3> <Ocm4> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm4> <Ocm5> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm5> <Ocm6> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </Ocm6> <IRAM> <Type>0</Type> <StartAddress>0x20000000</StartAddress> <Size>0x2800</Size> </IRAM> <IROM> <Type>1</Type> <StartAddress>0x8000000</StartAddress> <Size>0x8000</Size> </IROM> <XRAM> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </XRAM> <OCR_RVCT1> <Type>1</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT1> <OCR_RVCT2> <Type>1</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT2> <OCR_RVCT3> <Type>1</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT3> <OCR_RVCT4> <Type>1</Type> <StartAddress>0x8000000</StartAddress> <Size>0x8000</Size> </OCR_RVCT4> <OCR_RVCT5> <Type>1</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT5> <OCR_RVCT6> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT6> <OCR_RVCT7> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT7> <OCR_RVCT8> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT8> <OCR_RVCT9> <Type>0</Type> <StartAddress>0x20000000</StartAddress> <Size>0x2800</Size> </OCR_RVCT9> <OCR_RVCT10> <Type>0</Type> <StartAddress>0x0</StartAddress> <Size>0x0</Size> </OCR_RVCT10> </OnChipMemories> <RvctStartVector></RvctStartVector> </ArmAdsMisc> <Cads> <interw>1</interw> <Optim>1</Optim> <oTime>0</oTime> <SplitLS>0</SplitLS> <OneElfS>1</OneElfS> <Strict>0</Strict> <EnumInt>0</EnumInt> <PlainCh>0</PlainCh> <Ropi>0</Ropi> <Rwpi>0</Rwpi> <wLevel>2</wLevel> <uThumb>0</uThumb> <uSurpInc>0</uSurpInc> <uC99>0</uC99> <uGnu>0</uGnu> <useXO>0</useXO> <v6Lang>1</v6Lang> <v6LangP>1</v6LangP> <vShortEn>1</vShortEn> <vShortWch>1</vShortWch> <v6Lto>0</v6Lto> <v6WtE>0</v6WtE> <v6Rtti>0</v6Rtti> <VariousControls> <MiscControls></MiscControls> <Define>USE_STDPERIPH_DRIVER,STM32F10X_LD</Define> <Undefine></Undefine> <IncludePath>.\User;.\Libraries\CMSIS;.\Libraries\STM32F10x_StdPeriph_Driver\inc;.\APP\led;.\Public;.\APP\beep;.\APP\smg;.\APP\key;.\APP\exti;.\APP\time;.\APP\lcd1602;.\APP\dac0832;.\App_demo;.\APP\pcf8591;.\APP\iic;.\APP\ds18b20;.\APP\key;.\APP\step_motor;.\APP\dht11;.\APP\led</IncludePath> </VariousControls> </Cads> <Aads> <interw>1</interw> <Ropi>0</Ropi> <Rwpi>0</Rwpi> <thumb>0</thumb> <SplitLS>0</SplitLS> <SwStkChk>0</SwStkChk> <NoWarn>0</NoWarn> <uSurpInc>0</uSurpInc> <useXO>0</useXO> <uClangAs>0</uClangAs> <VariousControls> <MiscControls></MiscControls> <Define></Define> <Undefine></Undefine> <IncludePath></IncludePath> </VariousControls> </Aads> <LDads> <umfTarg>1</umfTarg> <Ropi>0</Ropi> <Rwpi>0</Rwpi> <noStLib>0</noStLib> <RepFail>1</RepFail> <useFile>0</useFile> <TextAddressRange>0x08000000</TextAddressRange> <DataAddressRange>0x20000000</DataAddressRange> <pXoBase></pXoBase> <ScatterFile></ScatterFile> <IncludeLibs></IncludeLibs> <IncludeLibsPath></IncludeLibsPath> <Misc></Misc> <LinkerInputFile></LinkerInputFile> <DisabledWarnings></DisabledWarnings> </LDads> </TargetArmAds> </TargetOption> <Groups> <Group> <GroupName>User</GroupName> <Files> <File> <FileName>main.c</FileName> <FileType>1</FileType> <FilePath>.\User\main.c</FilePath> </File> <File> <FileName>stm32f10x_it.c</FileName> <FileType>1</FileType> <FilePath>.\User\stm32f10x_it.c</FilePath> </File> </Files> </Group> <Group> <GroupName>Startup</GroupName> <Files> <File> <FileName>startup_stm32f10x_md.s</FileName> <FileType>2</FileType> <FilePath>.\Libraries\CMSIS\startup_stm32f10x_md.s</FilePath> </File> </Files> </Group> <Group> <GroupName>StdPeriph_Driver</GroupName> <Files> <File> <FileName>stm32f10x_gpio.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c</FilePath> </File> <File> <FileName>stm32f10x_rcc.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c</FilePath> </File> <File> <FileName>misc.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c</FilePath> </File> <File> <FileName>stm32f10x_exti.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c</FilePath> </File> <File> <FileName>stm32f10x_tim.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c</FilePath> </File> <File> <FileName>stm32f10x_flash.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c</FilePath> </File> <File> <FileName>stm32f10x_usart.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c</FilePath> </File> </Files> </Group> <Group> <GroupName>CMSIS</GroupName> <Files> <File> <FileName>system_stm32f10x.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\CMSIS\system_stm32f10x.c</FilePath> </File> <File> <FileName>core_cm3.c</FileName> <FileType>1</FileType> <FilePath>.\Libraries\CMSIS\core_cm3.c</FilePath> </File> </Files> </Group> <Group> <GroupName>APP</GroupName> <Files> <File> <FileName>lcd1602.c</FileName> <FileType>1</FileType> <FilePath>.\APP\lcd1602\lcd1602.c</FilePath> </File> <File> <FileName>key.c</FileName> <FileType>1</FileType> <FilePath>.\APP\key\key.c</FilePath> </File> <File> <FileName>iic.c</FileName> <FileType>1</FileType> <FilePath>.\APP\iic\iic.c</FilePath> </File> <File> <FileName>pcf8591.c</FileName> <FileType>1</FileType> <FilePath>.\APP\pcf8591\pcf8591.c</FilePath> </File> <File> <FileName>step_motor.c</FileName> <FileType>1</FileType> <FilePath>.\APP\step_motor\step_motor.c</FilePath> </File> <File> <FileName>ds18b20.c</FileName> <FileType>1</FileType> <FilePath>.\APP\ds18b20\ds18b20.c</FilePath> </File> </Files> </Group> <Group> <GroupName>Public</GroupName> <Files> <File> <FileName>system.c</FileName> <FileType>1</FileType> <FilePath>.\Public\system.c</FilePath> </File> <File> <FileName>SysTick.c</FileName> <FileType>1</FileType> <FilePath>.\Public\SysTick.c</FilePath> </File> <File> <FileName>usart.c</FileName> <FileType>1</FileType> <FilePath>.\Public\usart.c</FilePath> </File> </Files> </Group> <Group> <GroupName>App_demo</GroupName> <Files> <File> <FileName>app_demo.c</FileName> <FileType>1</FileType> <FilePath>.\App_demo\app_demo.c</FilePath> </File> </Files> </Group> </Groups> </Target> </Targets> <RTE> <apis/> <components/> <files/> </RTE> </Project> 分析上面的程序并写出代码的功能
05-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值