LINUX.ORG.RU

hello world на PHP

 , , ,


0

1

Слегка расширенный (показывает cl аргумент) хелловорлд:

Раз:

class System {

	public static function out(string $string) {
		$handle = fopen('php://stdout', 'w');
		fwrite($handle, $string.PHP_EOL);
		fclose($handle);
	}

	public static function argv() {
		return @$_SERVER['argv'][1] ? : '';
	}
}

class HelloWorld {

	public static function main(){
		System::out('Hello World! Your argument: '. System::argv() );
	}
}

HelloWorld::main();

И два:

function main(){
	
	function printStdOut(string $string) {

		function stream($handle, string $text) {
			$getHandle = function() use ($handle) {
				return $handle;
			};
			fwrite($getHandle(), $text."\n");
			fclose($getHandle());
		}

		stream(fopen('php://stdout', 'w'), $string);
	}

	function getArgv() {
		return @$_SERVER['argv'][1] ? : '';	
	}
	
	printStdOut('Hello World! Your argument: ' . getArgv() );
}

main();

Может перейти в обучении (скрипто-ЯП прежде всего) на такие вот первые программы-хелловолды? Ну посудите сами: что такое echo/print/etc «Hello World»? Что это за объяснение такое - языковая конструкция, которая "выводит одну или более строк" (из оф.док.)? Или просто "выводит текст" (науч.поп.)? Куда выводит, как выводит, какую строку. Ничего не понятно, пользы мало.

А если сразу начать разбирать вышеприведенные хелловолды, то вырисовывается много (весьма важных) тем для изучения начинающему программисту.

Как вариант: можно ли рассматривать написание изоморфных (указанным выше) хелловорлдов в других ЯП, как быстрый старт, в изучении этих самых ЯП опытным программистом? Насколько это будет продуктивно?



Последнее исправление: Edward_I (всего исправлений: 5)

Ответ на: комментарий от NetSurf

Ну и как оно aiohttp по ощущениям, как вебсокеты фурычат по скорости, могут тягаться с socket.io от ноды?

Очень даже ничего. Тягаться могут.

dem ★★
()
Ответ на: комментарий от no-such-file

Чувак предлагает не делать так, как ты показываешь...

Чувак просто пехепешник и видимо хейтер питона. Пехепешники, они такие, любят усложнять простой код, чтобы он выглядел солиднее, что ли.

Deleted
()

А если сразу начать разбирать вышеприведенные хелловолды,

А ты сам сможешь логически объяснить для чего в твоем хэллоу уорлде присутствуют классы? Что, намек на наследование? Или просто «чтобы было»?

Deleted
()
Ответ на: комментарий от no-such-file

Без @ нельзя, если ключей нет - будет ругаться.

почитай про отличия операторов ?? от ?:

kiotoze ★★★★
()
Ответ на: комментарий от Deleted

А если сразу начать разбирать вышеприведенные хелловолды,

А ты сам сможешь логически объяснить для чего в твоем хэллоу уорлде присутствуют классы?

Во второй части процитированного предложения из ОП есть ответ на ваш вопрос.

Топик был про обучение. Думаю не нужно объяснять, зачем изучать ООП и ФП (или знакомиться со специфичной реализацией ООП и ФП в ново-изучаемых ЯП)? А для (просто) вывода 'хелловорлд' не нужно ничего, кроме конструкции echo.

Edward_I
() автор топика
Ответ на: комментарий от Deleted

пример JS

Пехепешники, они такие, любят усложнять простой код, чтобы он выглядел солиднее, что ли.

Повторюсь, какой раз в этом треде - топик был не про PHP)

Вот попробует человек написать подобный «сложный» код в JavaScript'е и наткнется на различные трудности, растущие из особенностей языка. Узнает, что «чистого» stdout «из коробки» не существует. А реализация «обычного вывода» типа print зависит от движка-интерпертатора и потому имеет разную лексическую форму. Когда будет реализовывать stdout, то если у него Rhino - полезет через Java классы. Если Node.js полезет через встроенный нодовский класс. Именно через метод класса, а не абстрактную «магическую» инструкцию. А второй вариант поможет осознать, что все инструкции можно рассматривать как функции. Это даст понимание процесса вычисления.

При попытки спарсить аргументы, в ноде тоже проблем не будет - опять класс.метод. Как просто это сделать в Rhino, например я - не знаю, но если решать задачу во чтобы-то не стало, то можно попробовать спарсить из /proc'a. Плюс обучающийся (если он не совсем новичок) сразу осознает необычный (для джавистов, например) подход к ООП.

Таким образом, сразу человек может узнать много нового и полезного. И всё это из одной задачи по реализации какого-то хелловорлда, через stdout, в форме ООП/ФП.

Edward_I
() автор топика
Ответ на: пример JS от Edward_I

Вот попробует человек написать подобный «сложный» код в JavaScript'е и наткнется на различные трудности, растущие из особенностей языка. Узнает, что «чистого» stdout «из коробки» не существует.

А в браузере бывает stdout???

Вообще требование на произвольном языке реализовать примитивы другого языка — извращение. А то пошлю писать в stdout на FORTH и реализовывать JS alert() на PHP.

P.S. А реализация такого примитивного кода на любом не-Лиспе вообще позволит узнать много нового и полезного:

(define tree->generator
  (lambda (tree)
    (let ((caller '*))
      (letrec
          ((generate-leaves
            (lambda ()
              (let loop ((tree tree))
                (cond ((null? tree) 'skip)
                      ((pair? tree)
                       (loop (car tree))
                       (loop (cdr tree)))
                      (else
                       (call/cc
                        (lambda (rest-of-tree)
                          (set! generate-leaves
                            (lambda ()
                              (rest-of-tree 'resume)))
                          (caller tree))))))
              (caller '()))))
        (lambda ()
          (call/cc
           (lambda (k)
             (set! caller k)
             (generate-leaves))))))))
monk ★★★★★
()

В питон не можешь, так хоть на пыхе выпендриться пытаешься? :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.