前言:谁还在无脑复制代码?被重复代码折磨破防了

写代码谁没干过一件蠢事?一段打印分割线的循环,Ctrl+C、Ctrl+V 反复粘贴四五遍,改一处就得全文件挨个改,改到一半心态爆炸疯狂敲键盘。 就像课件里那段打印 “好好学习、天天向上” 的原始代码,30 个等于号的循环来回复制 4 次,代码堆得又臭又长,妥妥代码缝合怪现场,后期维护堪称地狱级折磨。而 Java 里的函数,就是专治这种复制怪的神器,堪称代码界的 “一键复用外挂”。

一、函数是啥?给重复代码安个外号,随叫随到

大白话翻译:把反复要用的一坨代码打包,起个小名,之后想用直接喊名字,不用再复制粘贴整段代码。 举个生活化抽象例子: 做饭时 “切菜” 是固定步骤,不用每次炒菜都重复拿刀、洗菜、切块。把切菜打包成一个动作,做菜时喊一句 “执行切菜” 就行,这切菜就等价于代码里的函数。 放到 Java 规则:函数只能写在类里面、main 方法外面,不能塞在 main 函数肚子里,位置错直接报错,相当于菜刀不能塞菜锅里面。

函数三件套(三要素):函数名、参数、返回值

  1. 函数名:起名讲究驼峰,像网红取名 首字母小写,后面新单词首字母大写,比如 printLine、calcSum,不能瞎起名乱七八糟拼音,代码圈起名也讲究排面。
  2. 参数:函数的投喂食材,分 “点菜菜单 (形参)” 和 “上桌饭菜 (实参)”
  • 形参:定义函数时写在括号里的变量,相当于提前写好菜单:需要什么食材、什么类型;
  • 实参:调用函数时传入真实数据,相当于实际端上桌的食材,数量、类型、顺序必须和菜单对上,乱塞直接报错翻车。
  1. 返回值:函数干完活的交工成果,void = 白干没报酬
  • void:函数忙活完啥也不返回,纯义务打工,只能用return;中途跑路结束函数;
  • 写 int/String 等类型:函数干完必须拿return交还对应类型结果,好比老板派活干完必须交报表,不交直接语法崩盘。

小冷知识:return 两个作用,一是交还结果,二是直接终止函数,return 后面写代码全是无效内容,相当于下班铃一响工位再也不干活。

二、两种调用姿势:喊函数干活分两种

1. 无返回值调用:直接点名干活

printLine();,就像喊保洁过来打扫卫生,干完走人不用给你带东西,对应 void 无返回函数。

2. 带返回值调用:干活要收货

好比跑腿代购,你给钱(实参 5),跑腿(函数)买完东西把货(结果)装进 res 变量,后续还能直接打印、运算,灵活度拉满。

三、函数到底好在哪?四大 buff 拉满

  1. 告别 Ctrl+C 地狱:重复代码只写一遍,从缝合怪变身精简代码大佬;
  2. 改一处全生效:修改功能只改函数本体,不用全网搜代码挨个替换,再也不用改代码改到深夜破防;
  3. 代码反复白嫖复用:写一次全项目随便调用,性价比拉满;
  4. 团队摸鱼式分工:A 写计算函数、B 写打印函数,各干各的不用互相改对方代码,职场协作神器。

四、函数底层运行逻辑:临时打工流水线

程序顺着代码走,碰到函数调用直接 “原地出差”,跳到函数内部执行代码;函数跑完带着返回值原路回到调用位置,继续往下走主代码。 嵌套调用 = 出差途中再派新任务,A 函数里喊 B 函数,B 干完回 A,A 干完回 main,套娃式打工。

五、递归:函数自己卷自己,自己调用自己

抽象释义:套娃行为,函数内部喊自己干活,但是必须留逃生出口,不然无限套娃直接卡死

经典例子:阶乘算法

翻译成人话:算 5! =5×4!,4!=4×3!…… 直到 1!=1 停止递归,这个if判断就是防内卷刹车,没刹车直接无限调用,程序原地宕机。

避雷提醒:递归没出口 = 无限套娃死循环,就像无限俄罗斯套娃拆不完,直接内存爆满崩盘。

六、回到开篇问题:用函数重构原垃圾代码

原先复制 4 遍循环打印分割线,现在封装一个打印 30 个 = 的函数:

短短几行干掉冗余代码,以后想改分割线数量,只改函数里数字就行,从复制粘贴小丑进阶优雅码农。

收尾小结

函数本质:代码打包打包再打包,消灭重复代码的顶级玩法,记住三要素、调用规则、递归必写终止条件,Java 函数入门直接通关。

 

更多推荐