弱类型语言比强类型语言的优势、劣势、分别是什么?能用两种语言如 PHP 和 C# 举例论证吗?
回复内容:
写JavaScript之前听人说不用理会变量的类型,直接用就好。然后各种进坑。。明明是区分的好吧,只是语言上不明显表示出来,另外附带一些不太智能的类型自动转换。
弱类型语言确实比较好入门,但要想精通还是不能忽略变量类型的。
另外,问题如果能在运行时外解决,干嘛要带进去呢。 最近javascript写得多深有体会。本来我就知道弱类型语言就是很容易写出翔,于是我牺牲了一点性能到处assert,加载一个页面assert了两千多次,证明效果还是很不错的。然而,浏览器并不会像Visual Studio一样,可以在任何情况下都非常直接的告诉我,到底哪个assert中了。更可恶的是,像C++/C#这样的语言,exception被catch的时候是会保留throw的那一刻的debug信息的,javascript直接就先unwind stack了再catch,还得苦逼的展开error对象的内容,人肉看stack information,自己跳过去,然而此刻本地变量早就丢了……
特别怀念写http://ASP.NET的时候,可以用Visual Studio来调试浏览器里的代码的日子。
php估计也差不多。 弱类型不严谨,在对类型要求比较严格的情况下就需要注意异常情况:比如接收参数时需要判断是int型,但是php收到的全部都可以当成字符串,要自己用intval之类的函数转换;有时候判断需要“===”才能保证不出问题。c#是不用担心这些的,类型不匹配在写代码的时候就报错了。
弱类型的优势有一个很好的例子就是操作json,php用json_decode函数一下就变成了一个数组,数组在php中是万能结构,想怎么用就怎么用。c#解json就有点复杂了,每一个值都要转换成对应类型,就是说你解析之前就要明白里面是什么结构,每个值是什么类型。 我猜题主其实想问的是动态类型语言和静态类型语言 在“严谨”的语言中,通常是预先定义好一个值的类型,自始至终,变量的类型是固定的。
对比起强类型,弱类型的缺点大概如下:
(1)弱类型不符合“所见即所得”,定义的变量类型是不可预见并且可以改变的。
(2)为了兼容弱类型,语言执行引擎要做了大量的兼容工作,包括类型识别,内存管理,类型转换等,增加了语言内部处理的复杂度,会导致执行效率的降低。
(3)变量的类型是不可控的,因此执行过程中拥有大量的变量类型“隐形转换”,在开发同学不清楚隐性转换规则的情况下,容易产生不可预知的结果。这个特性也完全不符合所见即所得的简单性。
但是,它们之所以可以发展起来,脱颖而出,也是有原因的,存在就有它的道理。
弱类型等语言特性,降低了程序员编写语言的门槛。编程言语是人类和机器沟通的桥梁,终极追求其实是“降低人和机器的沟通成本”,追求“人人皆可编程”的境界。
例如,从机器语言的0和1开始,后来变成汇编语言,汇编语言发展出来C,后来再有现在的脚本语言。编程学习的门槛不断降低,程序员的数量也随着指数增长。
而且,我相信未来还会继续发展出更低学习门槛的语言,促进程序员数量的再一次指数增长。
弱类型的语言也有优点:
(1)屏蔽了语言的复杂性和容易导致错误的地方,例如:内存管理、指针、变量的类型等。虽然,它屏蔽了比较复杂的特性,但是,并不代表它们不存在,这样的做法是对人友好(编程更简单,考虑的东西更少),但是对机器不友好。
(2)项目开发效率高。
(3)学习门槛低。
它虽然带有不少的问题,但是,也包含了很明显的优点。
PHP比较大范围地用于Web开发,Javascript统治浏览器端的开发,这些都不是偶然现象,而是人用脚投票选择出来的。
当然,术业有专攻,不同的语言解决不同场景的问题,不能一概而论。 比如fastCSharp,无论是开发效率还是运行效率,随时欢迎各位PHPer挑战。
弱类型语言有两个优势:一是eval,其实我真的不知道这算不算优势;二是有弱类型需求的情况下,代码相对于强类型语言更优雅(一行少敲几下键盘)。
弱类型语言的劣势太多太多,可以说满身都是,只是很多人不愿意承认而已。 弱类型比较重要的好处主要在于给另一些语言特性的实现带来的便利性。比如闭包和回调函数。PHP我不懂,不过javascript大量依赖的回调函数和衍生出来的error first callback pattern等东西,在强类型语言里会不好实现。当然也有别的非弱类型实现,比如Ruby会用argument as hash之类的手段来回避函数签名不一致之类的问题。
之前很多人提到理想中的语言应该有optional static typing。其实放到strong/weak typing上或者也是一样,最理想的是optional weak typing。只是我认为除非必要,否则不在编译期检查类型,所以应该是dynamic typing为缺省,显式的声明static typing。而强弱这边则应该是缺省强类型,显式声明弱类型(即明确表示内容convertible)。
不过目前看来还没有人整这样一门语言,XD,现有的凑合着用吧。 PHP的优势在于
PHP 是最好的语言好吧,我再说一遍等于我也有责任。
PHP是弱类型语言,容易出现什么问题呢?举个栗子。
<span class="cp"><?php</span> <span class="cm">/*</span> <span class="cm">strpos(string, find)</span> <span class="cm">返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。</span> <span class="cm">*/</span> <span class="nv">$string</span> <span class="o">=</span> <span class="s1">'zhihu'</span><span class="p">;</span> <span class="nv">$find</span> <span class="o">=</span> <span class="s1">'h'</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span> <span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">))</span> <span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span> <span class="nv">$find</span> <span class="o">=</span> <span class="s1">'z'</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span> <span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">))</span> <span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span> <span class="cp">?></span><span class="x"></span>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,
