V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huanyingch01
V2EX  ›  程序员

这应该是几年程序员可以写出的代码?

  •  
  •   huanyingch01 · 2018-01-29 09:14:12 +08:00 · 9308 次点击
    这是一个创建于 2250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如下代码是是在某个类中的某个 api,项目中各处充斥着大量这种函数

    function ChangeUserPropertiesResult:execute()
        local processQueue = {}
    
        local resultData = self.mData.resultData
        local allAnimationData = {}
    
        --dump(resultData, "resultData resultData", 10, 2)
        if resultData.uaitems and next(resultData.uaitems)  then
            for _,item in pairs(resultData.uaitems) do
                local aniResult = {}
                local userid = item.userId or item.userid
    
                if item.name == Player.DIRECTION then 
                    SingletonShareData:getPlayerWithId(userid):updateDataBonusWithName(Player.DIRECTION,{count = item.count})
                    --
                    local bd = MapDataManager:getUserPosition(userid).branchDirection or -1
                    MapDataManager:saveUserPosition(bd,userid,"branchDirection")
    
                    local posData = MapDataManager:getUserPosition(userid)
                    -- local nextPaths = PathFinder:findPathFromToEnd(posData.nowPos, item.count, 1)
                    -- local nextPath = nextPaths[1]
                    local tilePath = posData.nowPos
                    -- AvatarWalker:setStandAction(userid, tilePath, nextPath)
                    AvatarWalker:setAvatarPosition(userid,tilePath)
    
                elseif string.find(item.name,"c_") ~= nil then
                    local cardid = string.sub(item.name, 3, -1)
                    local action = ""
                    if item.count > 0 then
                        action = "add"
                    elseif item.count == 0 then
                        action = "clear"
                    else
                        action = "remove"
                    end
    
                
                    local itemType,itemName = unpack(string.split(item.name,"_"))
                    local cradsData = cc.exports.SingletonShareData:getPlayerWithId(userid):getDataBonusWithName(Player.CARDS)
                    local isHasBaoXianKa = false
                    if cradsData then 
                       for k,v in pairs(cradsData) do
                            if tonumber(v) == 29 then
                                isHasBaoXianKa = true
                                break
                            end
                        end
                    end
                
                    local isEnterHospital = cc.exports.SingletonShareData:getPlayerWithId(userid):hasStatusWithName("hospital")
                
                    if (isEnterHospital == true and isHasBaoXianKa == true) and tonumber(itemName) == 29 and item.count < 0 then
                        local data = {}
                        data.cardId = tonumber(itemName)
                        data.playerId = userid
                        local dialog = require("app.process.CardUseController").new() --// 建议位置
                        dialog:setInputData(data)
                        if data.cardId then
                           table.insert(processQueue, dialog)
                        end
                        --行为记录
                        PlayerActionRecordHelper:pushRecordData({tips_name="tips_card_other",function_name="getCardContent",data={userId=userid,resultData={cardid=data.cardId}}})
    
                        EmotionResult:getInstance():pushEmotionData({userId = userid,action = EA_USE_CARD,cardId = E_CARD_INSURANCE})
                        EmotionResult:getInstance():execute()                    
                    end
    
                    aniResult = {userId = userid,action=action,itemName = cardid,itemType = "card"}
                    if item.count > 0 then
                       for k = 1,item.count do
                           cc.exports.SingletonShareData:getPlayerWithId(userid):updateDataBonusWithName(Player.CARDS,{itemName = cardid, action = action})
                        end
                    else
                        cc.exports.SingletonShareData:getPlayerWithId(userid):updateDataBonusWithName(Player.CARDS,{itemName = cardid, action = action})
                    end
                else
                    cc.exports.SingletonShareData:getPlayerWithId(userid):updateDataBonusWithName(
                                                    item.name,{itemCount = item.count})
                    if item.count > 0 then
                        aniResult = {userId = userid,action="add",itemName = item.name,itemType = "points"}
                    end
                end
    
                allAnimationData[#allAnimationData + 1] = aniResult
            end
        end
    
    
        local diplayCtrlName = self.mExtraData and self.mExtraData.displayCtrlClass --or "UserPropertiesDisplayResult"
        if diplayCtrlName then
            local ctrl = require("app.processResult.displayResult."..diplayCtrlName).new()
            ctrl:setInputData(allAnimationData)
            ctrl:setCallBack(handler(self,self.executeProcessComplete))
    
            table.insert(processQueue, ctrl)
        end
    
        if next(processQueue) then
            local processCtrl = require("app.process.ProcessQueue").new(processQueue,function()
                self:executeProcessComplete()
            end)
            processCtrl:handlerQueue()
        else
            self:executeProcessComplete()
        end
    end
    
    MyDaLin
        1
    MyDaLin  
       2018-01-29 09:16:29 +08:00
    大家看我的网站,猜我是几年程序员?
    http://www.sucaihuo.com/
    aksoft
        2
    aksoft  
       2018-01-29 09:19:24 +08:00
    @MyDaLin 哈哈
    jorneyr
        3
    jorneyr  
       2018-01-29 09:30:08 +08:00   ❤️ 1
    有的一年当别人几年,有的几年当别人一年,因人而异,好奇的是写这个代码的人过一周后还能很快的看明白他写的是什么吗?接手的人能很快看明白写的是什么吗?
    hubhub
        4
    hubhub  
       2018-01-29 09:32:24 +08:00
    这是什么语言
    woscaizi
        5
    woscaizi  
       2018-01-29 09:36:23 +08:00 via iPhone
    @MyDaLin 两年最多,php 程序员。
    alen
        6
    alen  
       2018-01-29 09:36:33 +08:00
    这是 go 语法?
    m939594960
        7
    m939594960  
       2018-01-29 09:38:28 +08:00
    @MyDaLin TP 写的,看这样子两年应该算多了
    woscaizi
        8
    woscaizi  
       2018-01-29 09:40:02 +08:00 via iPhone
    @hubhub swift 吧。其实还好,这是没有重构的代码吧。注释基本没有这点不爽。
    MeteorCat
        9
    MeteorCat  
       2018-01-29 09:41:00 +08:00 via Android
    这写得啥? lua ? php ? java ?
    frend94
        10
    frend94  
       2018-01-29 09:43:59 +08:00
    这是 lua 吧
    sheaned
        11
    sheaned  
       2018-01-29 09:47:28 +08:00
    这是 lua 吗?
    Alexisused
        12
    Alexisused  
       2018-01-29 09:50:39 +08:00
    内容没仔细看,首先写的挺整齐的
    gemini767
        13
    gemini767  
       2018-01-29 09:51:25 +08:00 via Android
    @woscaizi Swift?什么时候 Swift 以 end 结尾了?
    sumu
        14
    sumu  
       2018-01-29 09:54:35 +08:00
    有注释,甭管几年,点个赞。有人写代码很随意:一两千行代码,0 注释这种事也是有的,N 层循环里面又有 N 个 if,也是有的,碰上这种操蛋的事,一旦接手,那就是踩雷,除了推翻彻底重构,根本没有办法
    maltoze
        15
    maltoze  
       2018-01-29 09:55:09 +08:00
    看起来是 lua
    v2410117
        16
    v2410117  
       2018-01-29 09:55:43 +08:00
    swift 肯定不是,lua 没接触过,php 有点像,但为啥没分号?求大神指点这是啥语言
    lujiajing1126
        17
    lujiajing1126  
       2018-01-29 10:01:59 +08:00 via iPhone
    Lua 吧😂是个手游?
    gecco
        18
    gecco  
       2018-01-29 10:03:54 +08:00
    语言都看不出来的人,围观吹吹水,就别乱说话带节奏啦。
    torbrowserbridge
        19
    torbrowserbridge  
       2018-01-29 10:03:55 +08:00   ❤️ 1
    @v2410117 哪里看的像 php 的?因为你不熟悉 php ?
    mentalidade
        20
    mentalidade  
       2018-01-29 10:05:11 +08:00
    肯定是 lua 啊
    mentalidade
        21
    mentalidade  
       2018-01-29 10:06:59 +08:00
    怎么会觉有人得是 PHP 和 java😓
    yujieyu7
        22
    yujieyu7  
       2018-01-29 10:07:53 +08:00
    @m939594960 这是 tp ?
    fenglangjuxu
        23
    fenglangjuxu  
       2018-01-29 10:09:35 +08:00
    我只能说这个人的 lua 水平应该很不错.当然如果不是复制粘贴码上去的话.
    fyxerma
        24
    fyxerma  
       2018-01-29 10:12:07 +08:00
    cocos ?
    Light3
        25
    Light3  
       2018-01-29 10:13:46 +08:00
    @v2410117
    php 就没有啥 then 这应该是 Lua...
    Len1133
        26
    Len1133  
       2018-01-29 10:14:39 +08:00
    起码有 1 年吧
    sudodo
        27
    sudodo  
       2018-01-29 10:19:40 +08:00
    你是没见过某大厂 82 年的老程序员写的 bullshit 代码……

    200 行一个方法,变量套三层……
    sunny352787
        28
    sunny352787  
       2018-01-29 10:21:48 +08:00   ❤️ 2
    游戏的 lua 代码,是一个道具效果的执行部分,我为什么知道呢,因为这代码架构应该是和我同一个师傅教的...不过也不能说这个代码写的很烂,因为很明显这段代码是不断增补变成这样的,勤快点的可能会做个重构,但这个貌似已经是过了 N 手了,也没人敢大动,只能一点点打补丁
    jyf
        29
    jyf  
       2018-01-29 10:23:01 +08:00
    这明显是写惯了 c 的人写的 lua 嘛 (怎么判断很简单 有 end 有 pairs)
    嫌麻烦建议用 moonscript 直接编译到 lua
    sunny352787
        30
    sunny352787  
       2018-01-29 10:24:42 +08:00
    卧槽,刚发现,EmotionResult 不是这么用的啊...谁审的代码啊,这么写打死算了
    micean
        31
    micean  
       2018-01-29 10:30:42 +08:00
    除了没注释挺好的
    xavier007
        32
    xavier007  
       2018-01-29 10:31:38 +08:00
    首先不是 PHP,PHP 最明显的就是$符号吗。其次他是有 end 且缩进的语法,那么也就那么几个语言,而且代码中有 player 字样,那么最接近的应该是 lua,lua 最长作为游戏脚本来用。会 lua 的一眼就看出来了,不会的分析下也看出来了
    woscaizi
        33
    woscaizi  
       2018-01-29 10:35:55 +08:00 via iPhone
    @gemini767 就刚刚,库克钦定的。
    jjianwen68
        34
    jjianwen68  
       2018-01-29 10:43:31 +08:00
    这段代码的性能如何,刚看到个 https://segmentfault.com/a/1190000004372649
    whx20202
        35
    whx20202  
       2018-01-29 10:47:41 +08:00
    我工作一年多了,没看出明显问题啊,谁能科普下槽点在哪里
    mars0prince
        36
    mars0prince  
       2018-01-29 10:52:27 +08:00
    没看出有啥毛病,if else 蛮多的,不过也正常,可能是不断打补丁
    coffeecato
        37
    coffeecato  
       2018-01-29 10:53:27 +08:00
    几年程序员不知道,使用 lua 开发一年左右应该差不多了。
    onehao28
        38
    onehao28  
       2018-01-29 10:54:04 +08:00
    最近在写 nginx 的 lua 脚本,看用法感觉是 lua 脚本吧
    m939594960
        39
    m939594960  
       2018-01-29 10:55:21 +08:00
    我先来,做个排除法首先他不是 html 代码
    HuHui
        40
    HuHui  
       2018-01-29 10:56:31 +08:00
    isHasBaoXianKa
    尿了
    rrfeng
        41
    rrfeng  
       2018-01-29 10:59:29 +08:00 via Android
    lua

    挺整齐...
    mrgeneral
        42
    mrgeneral  
       2018-01-29 11:00:48 +08:00
    刚开始还以为是 python 仔细一看代码是 lua

    也不是 nginx,都没有 http 相关的函数

    游戏吧,看到一个 Animation 哈哈
    xd314697475
        43
    xd314697475  
       2018-01-29 11:02:41 +08:00
    别猜了,这是 lua
    先做个小科普

    # 1. lua 语法特征:
    if ... end
    for .... end

    # 2. php 语法特征:
    php 的特征符号是$(面向$编程)
    变量前面带有$, eg. $a; $b;
    注意结尾的;
    语法整体上有 C 语言的感觉

    # 3. java 语法特征:
    类似 C 语言
    作为面向对象语言的代表,就是对象多,注意结尾有;
    new 关键字,public class,
    eg. ObjectReference = new Constructor();

    # 4. swift 语法特征:
    ;分号不是必要的
    变量 var,常量用 let
    条件语句 if 后面一般省略()


    因为对 lua 编程不是很熟悉,而且程序员几年不是一段代码能表现出来的
    最好放个项目出来,这样大家更容易了解
    Mutoo
        44
    Mutoo  
       2018-01-29 11:08:01 +08:00
    这是 Lua 语法,看到 cc.* namespace 应该是 cocos2d-lua 没跑。
    acros
        45
    acros  
       2018-01-29 11:10:07 +08:00
    没啥问题啊。
    是某个 RPG 游戏的 lua 脚本,初看就是退出人物装备(属性)界面,调用这个脚本处理结果的,除了中间 MagicNumber ( BaoXianKa···猜测为和策划运营统一,用的拼音)。
    vincentjie
        46
    vincentjie  
       2018-01-29 11:12:42 +08:00   ❤️ 1
    1. 这是 Lua
    2. 这是基于 Cocos2dx-Lua 开发的手机游戏
    3. 代码确实写得不够好的地方,但是以现在国内的手游开发现状的话,我也能理解为什么有时会写出这种代码
    3.1 槽点。其实主要是影响可读性的或者影响维护效率的问题
    3.1.1 在代码中直接使用常量
    3.1.2 函数过长
    3.1.3 嵌套过深
    3.1.4 在逻辑主干上处理特殊情况下的逻辑
    3.1.5 某些成员变量具有多重职责
    3.2 可能造成这种状况的原因
    3.1 开发人员素质参差不齐
    3.2 项目开发进度紧张
    3.3 策划人员素质参差不齐
    3.4 项目开发进度压力较大时,缺乏重构的动力及条件

    我以前刚接手一个老项目的时候,也产生过楼主这样的想法,我那个项目比这个还要复杂很多。动辄一两万行的 C++类,动辄几百行上千行的函数,结构混乱,层次不分。但随着项目一点点推进,参与项目的人越来越多,打包、测试越来越频繁,我逐渐理解为什么之前的代码里面充斥着那么多的垃圾。甚至有的时候,我自己都会写一些自己之前所不屑的垃圾。
    vincenttone
        47
    vincenttone  
       2018-01-29 11:13:46 +08:00
    半年到一年半
    acros
        48
    acros  
       2018-01-29 11:16:02 +08:00   ❤️ 1
    @vincentjie
    3.1.4 在逻辑主干上处理特殊情况下的逻辑
    这条你可以删了。
    Lua 就是为了处理游戏中各种业务逻辑特例才引入的。游戏开发不可能为了几个特例又拉开什么架构设计。
    要不然全部 C++解决了。
    newtype0092
        49
    newtype0092  
       2018-01-29 11:20:49 +08:00
    @xd314697475 其实 lua 还有两个最大的特点是 local 关键字和内置 lib table

    @mrgeneral 这个是用 Cocos2d-x 写的游戏,cc 是 libcocos2dx 的前缀。
    vincentjie
        50
    vincentjie  
       2018-01-29 11:44:57 +08:00
    @acros
    现在的 Lua 早已经不局限于处理业务逻辑特例了,为了在 iOS 平台上能进行热更新,更多的是,绝大多数性能不敏感的逻辑都已经全部放在 Lua 下处理了。不局限于 Cocos2dx,也包括基于 Unity 开发的游戏。
    slicent8
        51
    slicent8  
       2018-01-29 11:47:41 +08:00
    @MyDaLin 看你的网页样式 应该是 10 年以上了
    huanyingch01
        52
    huanyingch01  
    OP
       2018-01-29 11:55:07 +08:00
    @vincentjie 同学说的基本都是对的。本意只是吐槽一下 函数过长,没有拆分,内容过多。还有这是具有 10 年开发经验的程序员写的。
    imdoge
        53
    imdoge  
       2018-01-29 12:04:51 +08:00
    @MyDaLin 居然月访问上 1000k 了还在上涨中……怎么不挂点广告
    fxxkgw
        54
    fxxkgw  
       2018-01-29 12:27:28 +08:00
    大惊小怪,我会跟你说华为很多交换机驱动代码一个函数上万行么。。。茫茫多的 if else define 这种代码根本无法重构,但不得不说还是很稳定的。。
    xlrtx
        55
    xlrtx  
       2018-01-29 13:25:43 +08:00
    lua 的数据结构只有 table, 可以做列表, 也可以做字典, 对象.
    ayyll
        56
    ayyll  
       2018-01-29 13:43:43 +08:00
    @MeteorCat 排除法,首先,这不是 C
    discrete
        57
    discrete  
       2018-01-29 13:43:56 +08:00
    ``isHasBaoXianKa`` 23333
    seancheung
        58
    seancheung  
       2018-01-29 13:50:25 +08:00
    这是 lua 啊,还是 cocos2d
    seancheung
        59
    seancheung  
       2018-01-29 13:50:51 +08:00
    还没说完。。就是嵌套太多,局部变量太多
    chocotan
        60
    chocotan  
       2018-01-29 13:59:29 +08:00
    代码写的优雅与否基本不在面试的考查范围内吧
    sjx95
        61
    sjx95  
       2018-01-29 14:01:50 +08:00
    卧槽这古老的 Pascal 语法!!
    msg7086
        62
    msg7086  
       2018-01-29 14:05:24 +08:00
    #27 @sudodo 这么短小精悍的代码也敢叫 bullshit ?
    你没来我司真是太好了(泪流满面
    mentalidade
        63
    mentalidade  
       2018-01-29 14:05:34 +08:00
    自己需要注意的点,这个代码都避开了,看不出来什么槽点,除了函数过长。嵌套过深,这个经常改逻辑,谁都没法完全避免
    nikolai
        64
    nikolai  
       2018-01-29 14:25:16 +08:00
    没问题啊,上古代码能跑就行了,最好别碰。。(手动狗头
    enenaaa
        65
    enenaaa  
       2018-01-29 14:30:11 +08:00
    没毛病。 这种动画函数写着写着就长了。 因为没什么共性,经常也懒得重构。
    LeungJZ
        66
    LeungJZ  
       2018-01-29 14:34:26 +08:00
    @torbrowserbridge
    @mentalidade
    @yujieyu7
    @xavier007
    麻烦你们看清楚,人家回复 PHP,是因为一楼问的是他的网站用什么写的。所以他们回复了 PHP tp。
    youxiachai
        67
    youxiachai  
       2018-01-29 14:36:13 +08:00
    @huanyingch01 这是游戏用脚本,其实很正常啊。
    10 年也没啥好吐槽啊,而且正是老司机写才会觉得没啥问题。
    反而一些新人没吃够经验,才会想着各种技巧。。。
    a554340466
        68
    a554340466  
       2018-01-29 14:37:44 +08:00 via iPhone
    @woscaizi #8 这锅 Swift 不背
    qinrui
        69
    qinrui  
       2018-01-29 14:41:06 +08:00
    @MyDaLin 真是神奇,最近几天搜索东西才进入过这个网站,还注册了会员。注册登录后发现积分才能下载,就放弃了。
    mentalidade
        70
    mentalidade  
       2018-01-29 15:02:32 +08:00
    @LeungJZ 是我眼神不好吗,一楼问的是猜我是几年程序员? 有任何语句问的是他的网站是什么写的吗?
    gamecreating
        71
    gamecreating  
       2018-01-29 15:37:52 +08:00
    1 年吧
    whx20202
        72
    whx20202  
       2018-01-29 15:40:46 +08:00
    @vincentjie 最后一句很痛苦把 我也有过
    bestkayle
        73
    bestkayle  
       2018-01-29 15:41:13 +08:00
    @Light3 #25 终于捉到你了。。
    strahe
        74
    strahe  
       2018-01-29 16:23:04 +08:00
    梗在哪里?
    williamx
        75
    williamx  
       2018-01-29 16:24:16 +08:00   ❤️ 1
    lua 代码。

    大概有五年的功力,要是从业小于五年,那么天资不错啊!要是在十年左右,那么天资就比较垃圾了。



    关于天资的问题我是胡扯的。http://zhidao.baidu.com/question/191910604.html
    sgissb1
        76
    sgissb1  
       2018-01-29 16:47:48 +08:00
    没学过 Pascal,但是常常看别人用 delphi,也都快学会了部分语法了。
    rming
        77
    rming  
       2018-01-29 16:51:50 +08:00
    lua,应该是只写过 lua 吧,不带脑子写业务的那种,2 年吧
    lalala121
        78
    lalala121  
       2018-01-29 17:05:11 +08:00
    缩进很干净
    uxstone
        79
    uxstone  
       2018-01-29 17:08:28 +08:00
    这得看这段代码经过几次的需求改动
    focux
        80
    focux  
       2018-01-29 17:12:40 +08:00
    1. 几年的程序员都可能写出这样的代码,没必要纠结。
    2. 你在这种地方贴出公司的代码,小心告你,后果可大可小。
    w3sy
        81
    w3sy  
       2018-01-29 17:38:52 +08:00
    @woscaizi swift? 你这是黑 swift 吧……😊
    sobigfish
        82
    sobigfish  
       2018-01-29 20:09:59 +08:00
    @jyf #29 这个 moonscript 是新语言吧,居然不是强类型的 😂

    hello = "world"
    a,b,c = 1, 2, 3
    hello = 123 -- uses the existing variable
    DavidNineRoc
        83
    DavidNineRoc  
       2018-01-29 21:10:38 +08:00
    <?php
    call_user_func_array(function (...$parameters) {
    echo implode('', $parameters);
    }, [
    (string) new class {
    public function __toString()
    {
    return 'hello, world!';
    }
    },
    'DavidNineRoc'
    ]);
    DavidNineRoc
        84
    DavidNineRoc  
       2018-01-29 21:13:58 +08:00
    ```php
    call_user_func_array(function (...$parameters) {
    echo implode('', $parameters);
    }, [
    (string) new class {
    public function __toString()
    {
    return 'hello, world!';
    }
    },
    'DavidNineRoc'
    ]);
    ```
    akira
        85
    akira  
       2018-01-30 04:59:27 +08:00
    缩进挺整齐的
    Technetiumer
        86
    Technetiumer  
       2018-01-30 05:33:32 +08:00
    看到用 -- 做注釋就應該知道這是 Lua

    PHP 有超多的$
    Java 滿屏 public class
    jyf
        87
    jyf  
       2018-01-30 10:12:22 +08:00
    @sobigfish 是的 杂揉了 typescript 和 python 至少语法上比 lua 舒服多了 也不罗嗦了 当然好坏就见仁见智了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3240 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:14 · PVG 20:14 · LAX 05:14 · JFK 08:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.