资讯专栏INFORMATION COLUMN

你真的会写hello world的么?

tianhang / 1351人阅读

摘要:现如今编程这个行当,也约定俗成出了一个入行仪式,就是选你将要使用的编程语言,写段代码输出,这片文章讲的就是这么个事写个函数输出,请真的不要觉得很简单。但每行两个字符的限制,是把函数创建的生门堵死了。

自古,三百六十行,每一行入行的时候都有个仪式。现如今编程这个行当,也约定俗成出了一个入行仪式,就是选你将要使用的编程语言,写段代码输出hello world!,这片文章讲的就是这么个事——写个函数输出hello world,请真的不要觉得很简单。
先立一个flag

软件开发这个行业里面,有这么一句挺牛逼的话:“人生苦短,我用Python”,虽然Python我会用,也确实发自内心地觉得,在言简意赅这条路上,它配得上这句话。但今天我就想用JavaScriptpython叫叫板,比比更“”。问题只有一个:请使用JavaScript语言编写一个函数,返回hello world!

但是我有些个附加条件,嘿嘿嘿
题目 1. 每行代码不超过3个字符,总行数不超过9行

我先来做个示范,先抛开这条的附加条件,实现起来那就太简单了

function f(){
    return "hello world!"
}

OK, 然后在控制台用console.log(f())打印就可以看到hello world!了。

当加上这个附加条件,传统的函数定义方式显然行不通了。

当然现在,ES6已经相当普及,能想到箭头函数应在情理之中。其次就是一行字符串如何写成多行,这也应该是编程基础,不绕弯子了,直接上代码:

f=(
)=>
"h
el
lo
 w
or
ld
!"

涉及的JavaScript知识点:箭头函数字符串换行

题目 2. 每行代码不超过2个字符,总行数不超过30行
每行两个字符,你是不是连函数都不会定义了,反正箭头函数是行不通了
总行数不超过30行,有点残忍,算了40行也行吧

如果只出题目和贴答案,对于各位看官来说,这也只能算是奇技淫巧。所以本着阅有所得得出发点,我还是简略剖析下我的思路,希望能给你些启发:

在每行两个字符的限时下,考虑到字符串换行符的存在,所要返回的hello world!字符串还是可以输出的,只不过多些几行的事,问题不大。

基于第一步中的方法,在不考虑总行数限制的情况下,其实什么字符串都是可以分拆成多行写的。但每行两个字符的限制,是把函数创建的生门堵死了。

想到JavaScript中一起皆对象,不同类型的对象都有些许内置的属性和方法,与此同时,最精妙绝伦的是,函数的调用除了用.符号外,还可以用数组的方式,即可以在数组符号[]中,写方法名的字符串进行方法的调用。可使用的方法,仅供参考:"".trim()"".slice()[].join()

如此我们便可用些内置的函数,来代替创建新函数。可想而知,在每行两个字符的限制下,无论是箭头函数,还是function()什么的,都显得太过无力了。

你以为到此为止,问题就解决了么?,你会立马遇到另一个问题——每行两个字符限制下,调用函数时怎么传参

我只能说,ES6中有个好东西——带标签的模板字符串

不说啥了,看代码吧

f=
""
[
"
t
r
i
m"
][
"
b
i
n
d"
]`
H
e
l
l
o
,
 
w
o
r
l
d!
`

涉及的JavaScript知识点:字符串换行trim()join()bind()模板字符串

激不激动,刺不刺激。
其实还不够,我是个有时间,就想把事情做到极致的人
握紧方向盘,系好安全带,我们继续
题目 3. 每行代码不超过1个字符,总行数不超过120行
有没有世界观快要崩塌了,是不是开始觉得,自己从来没学过真的JavaScript。
有没有不仅函数不会创建使用了,没有字符串换行符,是不是连字符串都不会写了。

好了,言归正传,

如果你想挑战一下自己,那么就请先不要继续往下阅读,暂时移步如下你熟悉的在线编辑器,尝试一番:

CodePen

JsBin

jsfiddle

JsRun

RunJs

CodingGround

或者直接在浏览器的Console中尝试也可以。







[
,
j
,
,
o
,
,
i
,
,
n
,
,
b
,
,
d
,
,
s
,
,
p
,
,
l
,
,
t
]
=
`
j
o
i
n
b
d
s
p
l
t
`
f
=
[
]
[
j
+
o
+
i
+
n
]
[
b
+
i
+
n
+
d
]
(
`
H
e
l
l
o
,
 
w
o
r
l
d
!
`
[
s
+
p
+
l
+
i
+
t
]
`
`
,
[
]
+
[
]
)

在问题2时,已较为详细的分析了思路,问题3问题难度虽然加大,但思路基本不变,这里为了便于理解,仅汇总一下涉及到的知识点:

模板字符串,可以自由换行,但换行处会有一个换行符

解构赋值,字符串可以看成是单个字符组成的数组,由于数组的定义可以换行,通过将模板字符串解构赋值给数组,便可获得初始化为单个字符的变量。

一些字符串和数组的内置方法:join()splite()

改变函数执行上下文的方法:bind(),同时可复习与apply()call()的区别和联系。

这或许算是一条奇技淫巧:[]+[]表示空字符""

其实我就一个想法,看过之后不要觉得这是篇讲述什么奇技淫巧的文章,倘若能帮你回顾复习了些JavaScript的基础知识,便就善莫大焉了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95799.html

相关文章

  • javascript 函数式编程思想

    摘要:今天这篇文章主要介绍函数式编程的思想。函数式编程通过最小化变化使得代码更易理解。在函数式编程里面,组合是一个非常非常非常重要的思想。可以看到函数式编程在开发中具有声明模式。而函数式编程旨在尽可能的提高代码的无状态性和不变性。 最开始接触函数式编程的时候是在小米工作的时候,那个时候看老大以前写的代码各种 compose,然后一些 ramda 的一些工具函数,看着很吃力,然后极力吐槽函数式...

    YPHP 评论0 收藏0
  • 《C语言入门》真的会打印Hello World吗,花式打印Hello World

    摘要:而再加上后,则会打印一行清除一行,是一个系统命令,如此便产生了更酷炫的效果。完整代码如下,大家有兴趣可自行尝试感谢大家的观看,欢迎点赞评论,有关必回,祝大家万事如意。 #includeint main(){ printf(Hello World!); return 0;} 想必上面这一段代...

    weij 评论0 收藏0
  • 【Java】第一章 HelloWorld

    摘要:下载,并解压环境变量配置右键我的电脑属性高级环境变量系统变量注意是下面的系统变量,不是上面的用户变量新建变量名,变量值修改变量,在最前面加上注意是首字母大写,不要改成,后面要有分号注意系统变量上面的用户变量里,不要有这两个,如果有应 1 JDK (1) 下载,并解压 (2) 环境变量配置 右键我的电脑->属性->高级->环境变量->系统变量注意:是下面的系统变量,不是上面的用户变量...

    Ryan_Li 评论0 收藏0
  • extjs4学习之配置

    摘要:最近在学习发现一篇文章中有错误,网上很多人都是直接复制粘贴那篇文章,结果每个人注释中都是写的正确的答案,我也是醉了,这些猿么复制粘贴代码都不带检查的么,为啥都变得很浮躁了呢。 最近在学习extjs4发现一篇文章中有错误,网上很多人都是直接复制粘贴那篇文章,结果每个人注释中都是写的正确的答案,我也是醉了,这些猿么复制粘贴代码都不带检查的么,为啥都变得很浮躁了呢。 现提供可以调试的代码: ...

    crossoverJie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<