写程序为什么要检查传入值?给编程新手们一个详尽的解答

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 ก.ย. 2024
  • 前两天在粉丝群有个朋友问了一个看似简单的问题,但是这个问题之后其实也有蛮多可聊的内容。这期视频我们就尽可能详细地聊一下,为什么我们在函数里要检查传入值。

ความคิดเห็น • 43

  • @allenho324
    @allenho324 4 หลายเดือนก่อน +6

    這只針對單一小程式
    但是大程式或專案我更建議的是獨立寫io
    這樣可以在io階段就建立很好的處理,把所有轉換在一開始就處理好,省下很多麻煩和時間

  • @kafuu1
    @kafuu1 4 หลายเดือนก่อน +14

    rust 的option设计直接强制让你思考里面是不是None

  • @user-abiko_cccc
    @user-abiko_cccc 4 หลายเดือนก่อน +1

    菜鸟和老手的最大区别就是,菜鸟永远把应用环境想得很简单很理想,觉得什么事都应该是“顺的”。但只有久经考验的老手才知道这种对各种异常毫无准备的东西真的到了实战环境里会有多脆弱和不堪一用。

  • @taochen71
    @taochen71 3 หลายเดือนก่อน

    越好的程式設計員,越會考量怎麼讓程式越簡單越容易被調用。 而把錯誤忽略或是放飛是一種很容易讓事情變很複雜的行為😊

  • @user-abiko_cccc
    @user-abiko_cccc 4 หลายเดือนก่อน +3

    一句话就是我常说的:优秀的工程师做的东西一定是首先把客户假设成一个笨蛋的人。因为只有把笨蛋的操作都能全部正常应付自如了,才是优秀的产品。一定不要把客户当聪明人,一定要把客户当笨蛋,要站在笨蛋的角度上去想象你的用户会对你产品做的事情,然后以此做好完全的对应,你的产品才能优秀。

  • @Isongzhe
    @Isongzhe 4 หลายเดือนก่อน

    後端新手學到很多,謝謝❤

  • @lefz9298
    @lefz9298 4 หลายเดือนก่อน +3

    和语言有很大关系,强类型语言可以在让编译器、解释器去处理大部分类型问题,有的语言甚至可以定义参数是否可为空值

    • @MBS_YT
      @MBS_YT 4 หลายเดือนก่อน

      正確!TypeScript 和 cpp 就可以這樣做

  • @biu233
    @biu233 4 หลายเดือนก่อน +1

    我就是那个新手,不需要判断异常,因为代码越简单越好,代码越少可读性就越强,一大堆代码看的眼都快了。
    这也是我不喜欢go和rust的原因,不然就不用Python了

    • @呀咧呀咧
      @呀咧呀咧 4 หลายเดือนก่อน

      那你不適合programming

    • @palapapa0201
      @palapapa0201 4 หลายเดือนก่อน +1

      喜歡動態型別那你還真是個新手

  • @LeeeroyDex
    @LeeeroyDex 4 หลายเดือนก่อน +1

    我司这边类型检查和范围检查,有的有,有的没有,具体由工程设计要求上决定。

  • @timchang2881
    @timchang2881 4 หลายเดือนก่อน

    關鍵是我自己寫的和函式,過個幾天後我都不能確認一定能傳入正常值😂,實在太費精神了不如再函式中把例外情況都處理掉還比較簡單🙃

  • @b_2u
    @b_2u 4 หลายเดือนก่อน +3

    類型判斷的部分,我覺得比較像動態語言的缺陷吧,真的有需要就用pyright之類的靜態分析工具,沒必要為了他特別加isinstance()檢查
    至於array的部分,Rust再get()時就會強迫你處理空的情況,吹一下

    • @xiaoeyun
      @xiaoeyun 4 หลายเดือนก่อน

      Rust 寫的舒適,再用其他語言感覺都會覺得(編譯器)很笨

  • @jui-shuyeh6807
    @jui-shuyeh6807 4 หลายเดือนก่อน +3

    天哥好,請問是否有機會出一期有關 try except error handling,身為一個程式新手,還滿容易把程式給搞崩,希望了解身為程式初心者,如何建立一個強壯的程式。注意要點事項

    • @mai6666
      @mai6666 4 หลายเดือนก่อน

      去學一下pydantic

  • @wawaseer
    @wawaseer 3 หลายเดือนก่อน

    但是判断会降低性能,我如果开发一个低延时的程序,影响就很大

  • @liusuzhang
    @liusuzhang 4 หลายเดือนก่อน +1

    感谢博主的视频. 作为新手, 我也有个疑问, 是关于测试的. 几乎所有的老手都会说测试对于一个项目而言很重要. 我的疑问是假如写测试的时候能保证测试代码可以完整覆盖异常的case, 那么完全可以在项目代码里处理好了. 而如果我写的测试并不能保证完整覆盖异常case, 那我的测试代码也没有存在的意义了呀.

    • @王冠倫-y2c
      @王冠倫-y2c 4 หลายเดือนก่อน

      除測試可以對著需求規格寫之外,還可以避免之後添加功能時就功能壞掉 (即早發現)。
      你說的點比較接近前者,這在單人撰寫時可能比較不需要沒錯 (程式沒太長,也沒改來改去的話)。

    • @liusuzhang
      @liusuzhang 4 หลายเดือนก่อน

      @@王冠倫-y2c 所以除非是业务代码和测试代码是分工合作的项目, 一人项目的测试确实没有太多意义对吗?

    • @王冠倫-y2c
      @王冠倫-y2c 4 หลายเดือนก่อน +1

      @@liusuzhang 一人項目且考慮長期維護性的話,還是需要。未來的你要當成另一個人,也就是說要視為多人合作。
      .
      快速寫完就丟的程式,不檢查其實也還好。像是學校作業啊,外包案啊,趕上線 (隕石式開發?) 啊,之類的,應該都沒在做這個檢查。

    • @robertnull6653
      @robertnull6653 4 หลายเดือนก่อน

      一點淺見,程式就算經過充分檢驗,過個一兩年甚至有幾個月,就可能因為套件升級或環境變化而產生新漏洞或bug,所以程式需要定期維護, 寫測試的好處是可以重複利用。完美的程式不存在也沒意義,只要有抓到新錯誤就是有價值的,現在給gpt寫測試非常快了,就算是一人開發也不耗太多時間

    • @無名氏-l1c
      @無名氏-l1c 4 หลายเดือนก่อน

      @@liusuzhang 應該說在項目早期架構經常變動的情況寫了意義也不大,你用chatGPT寫的那點東西如果是一人開發的話也就是寫個心安的,真的QA是要絞盡腦汁從各個角度去測的。老實說我覺得前期的各種unit test意義都不大,在架構確定後才開始有點意義

  • @kenzo2793
    @kenzo2793 4 หลายเดือนก่อน +1

    會不會傳入錯誤的值是邏輯的問題, 而要不要檢查類型則是工程的問題, 這些小事情就能分辨你是程序員還是工程師

  • @alchenerd
    @alchenerd 4 หลายเดือนก่อน

    嗯?不是應該請求原諒而不是請求允許嗎?

  • @冯立强
    @冯立强 4 หลายเดือนก่อน

    没写过 assert ?传空指针了还不让他挂,留着bug 过年啊

  • @eroo2271
    @eroo2271 4 หลายเดือนก่อน +1

    我的答案是,想写就写,不想写就不写,除非你写的是c,c++。想python这种高级语言外面直接try一下也可以,无伤大雅。

    • @無名氏-l1c
      @無名氏-l1c 4 หลายเดือนก่อน

      其實問題就是你想在function call的時候panic還是在function內部panic。要看具體情況跟個人習慣

    • @z48723888
      @z48723888 4 หลายเดือนก่อน +1

      写try也很麻烦,应该可以可选的直接在函数定义处,简单粗暴的写入默认出错返回值。出错,想单独处理的话,从其他地方对返回结果进行判断处理,不要在函数内进行处理。

    • @eroo2271
      @eroo2271 4 หลายเดือนก่อน

      @@z48723888 都说了c/c++除外

  • @user-sv7bx6gn8n9
    @user-sv7bx6gn8n9 4 หลายเดือนก่อน

    Use type annotation

  • @张蛋疼
    @张蛋疼 4 หลายเดือนก่อน

    早点报错≠早点崩溃

  • @davidxia1502
    @davidxia1502 3 หลายเดือนก่อน

    这就是为啥 dart 冒着不向前兼容的恶评加入option。 也是为啥java新版本要加入option. 也是为啥rust的设计从一开始就内置option。 也是为啥golang是个垃圾语言的原因之一(🐶)

  • @青年马
    @青年马 2 หลายเดือนก่อน

    大神你好。能不能麻烦你做一期关于python程序打包的内容呢?谢谢!

  • @chieeyeoh6204
    @chieeyeoh6204 4 หลายเดือนก่อน +1

    So often I only perform input sanitization at the top level. Subsequent function basically assume the previous validation rules were good enough to catch it.
    As the function grow longer, I break it into multiple smaller functions. The program will have massive overhead if we were to check it again on every sub function.

  • @Spring_IoC
    @Spring_IoC 4 หลายเดือนก่อน

    Java后来提供了Optional这个类就是为了在接力传值的出现Null的情况,尤其是数据库的Entity

  • @mai6666
    @mai6666 4 หลายเดือนก่อน +1

    建議使用 pydantic 大專案都用這個來做這件事情

    • @miaohf
      @miaohf 4 หลายเดือนก่อน

      希望up主能进一步介绍下pydantic的使用

    • @mai6666
      @mai6666 4 หลายเดือนก่อน

      @@miaohf 我覺得這個應該比較難 因為中國那邊的專案好像都不怎麼流行使用這個套件
      但國外的大專案 微軟 google之類的都在用 感覺他會需要花點時間研究